Site icon Микола Полтавцев

Как показать не опубликованную запись на WordPress

Сегодня у меня возникла задача показать (расшарить) неопубликованную запись со своего блога по уникальной ссылке.

В стандартном функционале такой функции нет. Пост могут просмотреть только пользователи имеющие определенную роль на блоге и, конечно же, зарегистрированные. Для моих задач этот способ не приемлем, так как мне нужно чтобы человек быстро перешел по ссылке и посмотрел на пост, без предварительной регистрации.

Можно, конечно, перекинуть статью в Google Docs и кинуть ссылку оттуда, но это лишние движения. Также, если нужно передать оформление поста, то в Google Docs это не получиться. Кроме того, если нужно делать это регулярно (как в моем случае), то это каждый раз занимает много времени.

Поэтому, решено добавить такой функционал прямо на блог. В идеале, конечно, чтобы можно было еще и редактировать, но пока хватит и обычного просмотра. Редактирование, возможно, добавлю в будущем.

Плагин Public Post Preview

Итак, решений, как всегда, есть несколько. Для любителей плагинов, можно воспользоваться плагином Public Post Preview. Я его не тестировал, но он должен работать корректно, там нет ничего сложного. После активации плагина, в панели публикации каждого поста появляется галочка, которая отвечает за возможность просмотреть пост без регистрации. Ставите галочку, копируете ссылку и делитесь с нужным человеком.

Как показать не опубликованный пост без плагина

Я не люблю плагины и предпочитаю все делать ручками, что и вам рекомендую.

Чтобы добавить похожий функционал, открываем файл function.php находящийся в папке активной темы и в сам низ перед символом ?>добавляем следующую конструкцию:

add_filter( 'posts_results', 'set_query_to_draft', null, 2 );
function set_query_to_draft( $posts, &$query ) {

if ( sizeof( $posts ) != 1 )
return $posts;

$post_status_obj = get_post_status_object(get_post_status( $posts[0]));

if ( !$post_status_obj->name == 'draft' )
return $posts;

if ( $_GET['key'] != 'guest' )
return $posts;

$query->_draft_post = $posts;

add_filter( 'the_posts', 'show_draft_post', null, 2 );
}

function show_draft_post( $posts, &$query ) {
remove_filter( 'the_posts', 'show_draft_post', null, 2 );
return $query->_draft_post;
}

Где guest, можете изменить на любое значение, это ваш уникальный ключ доступа к статьям.

После этого, перейдя по ссылке “Просмотреть” и добавив в адресную строку значение &key=guestможно копировать ссылку и делиться статьей с кем угодно. Например, ссылка для просмотра данной статьи будет такой:

https://poltavcev.biz/?p=12434&preview=true

Предпросмотр по данной ссылке доступен только мне, как администратору блога. Но, если я добавляю в конец ссылки нужный кусок &key=guest, то получаю ссылку вида:

https://poltavcev.biz/?p=12434&preview=true&key=guest

И по этой ссылке черновик будет уже доступен любому, кто её получил.

Естественно, это добавляет определенную опасность в блог, так как зная переменную guest и ID записи, любой может просмотреть ваши черновики. Но с другой стороны, вы вольны использовать любой ключ, например такой st0J|YoEmuBepsSNkmJB$XfO#m%neqqhdj%X?i#Qtyu5JOIL1R

С таким ключом ваша ссылка намного лучше защищена и будет выглядеть следующим образом:

https://poltavcev.biz/?p=12434&preview=true&key=st0J|YoEmuBepsSNkmJB$XfO#m%neqqhdj%X?i#Qtyu5JOIL1R

Кроме того, ключ можно время от времени менять (для параноиков), так что это не является таким страшным…

Если что-то не понятно или возникли вопросы, то оставляйте их в комментариях.

Exit mobile version