Как получить ссылку на запись со статусом черновик WordPress?
Нужно получить до публикации постоянную ссылку на запись.
get_post_permalink() и get_permalink() выдают не ЧПУ ссылку вида https://site.com/?post_type=team&p=1888
$post->post_name пустой
При этом поле постоянная ссылка заполнено
Дополнительные вопросы
Ответы:
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()) );
- Дмитрий, подходит для решения. Спасибо!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

У черновика в WordPress может не быть нормальной постоянной ЧПУ-ссылки в том виде, как у опубликованной записи. Это ожидаемо: запись ещё не опубликована,
post_nameможет быть пустым, а публичный permalink не обязан открываться для обычного посетителя. Для просмотра до публикации WordPress использует preview-ссылку.Если вам нужна ссылка именно для предпросмотра, используйте:
$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);
Если ссылка нужна клиенту, который не авторизован в админке, обычный preview может не подойти. Тогда есть варианты:
Не стоит пытаться насильно получить «красивый» публичный permalink для черновика и раздавать его как рабочую ссылку. До публикации это именно предпросмотр, а не постоянный URL.