Как получить чистую постоянную ссылку в черновик?

Когда я использую the_permalink или get_the_permalink в черновом или запланированном сообщении, предоставленный URL-адрес не является «окончательной» постоянной ссылкой – это версия « ?p=xxxxx .

Как я могу получить финальную, «чистую» постоянную ссылку, чтобы отображаться в черновом или запланированном сообщении?

Я мог бы сделать что-то, связанное с $post->post_name , но мне также нужен этот путь, и это зависит от типа post и типа postlink. Существует ли «универсальный» способ сделать это?

Solutions Collecting From Web of "Как получить чистую постоянную ссылку в черновик?"

Это немного «взломанный», но когда вы вызываете get_permalink и вам нужна постоянная ссылка на черновик, предоставите клон вашего объекта post с заполненными данными:

 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(); } 

Поскольку редактор отображает прогнозируемую постоянную ссылку для редактора slug, у него должен быть некоторый способ понять это. От взгляда на источник, который обрабатывается 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 ); } 

Нет уверенности, что он надежный, но отлично работает от быстрого теста. 🙂