Как получить ссылку на запись со статусом черновик WordPress?

Ссылка скопирована
1 ответ

Нужно получить до публикации постоянную ссылку на запись.
get_post_permalink() и get_permalink() выдают не ЧПУ ссылку вида https://site.com/?post_type=team&p=1888

$post->post_name пустой

При этом поле постоянная ссылка заполнено

Как получить ссылку на запись со статусом черновик Wordpress?

Дополнительные вопросы

Ответы:

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

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

  • $my_post = clone $post;
    создает копию в бд?
    или в памяти сервера, а после выполнения удаляется?
  • Илья Петров, зачем вам эта фигня с переписыванием глобального поста?

    берите и не парьтесь

    require_once ABSPATH . '/wp-admin/includes/post.php'; var_dump(      get_sample_permalink(get_the_ID()) );

    require_once ABSPATH . '/wp-admin/includes/post.php'; var_dump( get_sample_permalink(get_the_ID()) );

  • Дмитрий, подходит для решения. Спасибо!
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

У черновика в WordPress может не быть нормальной постоянной ЧПУ-ссылки в том виде, как у опубликованной записи. Это ожидаемо: запись ещё не опубликована, post_name может быть пустым, а публичный permalink не обязан открываться для обычного посетителя. Для просмотра до публикации WordPress использует preview-ссылку.

Если вам нужна ссылка именно для предпросмотра, используйте:

$preview_url = get_preview_post_link($post_id);

$preview_url = get_preview_post_link($post_id);

Если нужно получить будущий slug, его можно сформировать/сохранить перед публикацией, но это не сделает черновик публичной страницей. WordPress может показывать URL вида ?post_type=team&p=1888, потому что запись ещё не имеет опубликованного rewrite-URL.

Пример безопасного получения ссылки для редактора:

$post_id = 1888;
$post = get_post($post_id);
 
if ($post && $post->post_status === 'draft') {
    $url = get_preview_post_link($post);
} else {
    $url = get_permalink($post);
}
 
echo esc_url($url);

$post_id = 1888; $post = get_post($post_id); if ($post && $post->post_status === 'draft') { $url = get_preview_post_link($post); } else { $url = get_permalink($post); } echo esc_url($url);

Если ссылка нужна клиенту, который не авторизован в админке, обычный preview может не подойти. Тогда есть варианты:

  • создать временного пользователя с минимальными правами;
  • использовать плагин приватного предпросмотра;
  • опубликовать запись с закрытым доступом или noindex на время согласования;
  • сделать staging-копию и показывать материал там.

Не стоит пытаться насильно получить «красивый» публичный permalink для черновика и раздавать его как рабочую ссылку. До публикации это именно предпросмотр, а не постоянный URL.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно