ドラフトまたはスケジュールされた投稿でthe_permalink
またはget_the_permalink
を使用する場合、提供されるURLは「最終的な」パーマリンクではありません - それは未確認の?p=xxxxx
バージョンです。
ドラフトまたはスケジュールされた投稿に最終的な「クリーンな」パーマリンクを表示するにはどうすればよいですか。
私は$post->post_name
を使って何かをすることができました、しかし私は同様にパスを必要とします、そしてそれは投稿の種類によって異なり、パーマリンクの構造に依存します。これを行うための「普遍的な」方法はありますか?
これはちょっと「ハッキー」ですが、get_permalink
を呼び出してドラフトのパーマリンクが必要な場合は、投稿オブジェクトのクローンを詳細を記入して提供してください。
global $post;
if ( in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {
$my_post = clone $post;
$my_post->post_status = 'publish';
$my_post->post_name = sanitize_title(
$my_post->post_name ? $my_post->post_name : $my_post->post_title,
$my_post->ID
);
$permalink = get_permalink( $my_post );
} else {
$permalink = get_permalink();
}
エディタはスラッグエディタのために投影されたパーマリンクを表示するので、それを理解するための何らかの方法を持たなければなりません。 get_sample_permalink_html()
と get_sample_permalink()
によって扱われるソースを見ることから。
私たちはフォームの狡猾なしでリンクを必要とするだけなので、それを次のようなものに作り直すことができます。
function get_draft_permalink( $post_id ) {
require_once ABSPATH . '/wp-admin/includes/post.php';
list( $permalink, $postname ) = get_sample_permalink( $post_id );
return str_replace( '%postname%', $postname, $permalink );
}
それは絶対確実であるという自信はありませんが、クイックテストからうまく動作します。 :)