Если вы администратор, редактор на блоге или автор поста, то вы можете установить на него пароль (под постом в данном случае я буду подразумевать запись, страницу или пост произвольного типа — то есть защита паролем работает для всех них).
Как поставить пароль на запись или страницу сайта
На самом деле защитить запись паролем не сложнее, чем создать эту самую запись. Всё, что вам потребуется это:
По сути всё. Если теперь мы перейдём на страницу поста, то увидим:
Содержимое и цитата этого поста также скроется и с других страниц сайта, например главная, категории и т.д. Но вы сможете изменить текст, отображаемый вместо цитаты.
Пароль также можно установить через быстрое редактирование записи:
Ещё несколько вещей про защиту паролем, про которые вам следует знать:
Как защитить паролем мета-поля?
По умолчанию действие защиты паролем не распространяется на произвольные поля постов. Защищать их придётся вручную при помощи функции post_password_required().
if ( ! post_password_required() ) { // выводим значение произвольного поля только если защита снята echo 'Адрес: ' . get_post_meta( get_the_ID(), 'addr', true ); }
Изменяем время действия пароля
По умолчанию введённый пользователем пароль запоминается на 10 дней, но вы можете изменить это значение при помощи фильтра post_password_expires
:
add_filter( 'post_password_expires', 'true_change_pass_exp', 25 ); function true_change_pass_exp( $exp ){ return time() + 5 * DAY_IN_SECONDS; // 5 дней к примеру (текущее время + 5 дней) }
Не знаете, куда вставлять сниппет кода?
Как изменить форму ввода пароля на страницах сайта?
Я находил несколько чересчур хитрых решений на не буду говорить каких сайтах, но на самом деле всё делается очень очень просто:
add_filter( 'the_password_form', 'true_new_post_pass_form' ); // вешаем функцию на фильтр the_password_form function true_new_post_pass_form() { /* * в принципе тут нужно обратить внимание на три вещи: * 1) куда ссылается форма, а также method=post * 2) значение атрибута name поля для ввода - post_password * 3) атрибуты size и maxlength поля для ввода должны быть меньше или равны 20 (про длину пароля я писал выше) * Во всём остальном у вас полная свобода действий! */ return '<form action="' . site_url( 'wp-login.php?action=postpass', 'login_post' ) . '" method="post"> <input name="post_password" type="password" size="20" placeholder="Пароль к записи" maxlength="20" /> <input type="submit" name="Submit" value="Разблокировать" /> </form>'; }
Не знаете, куда вставлять сниппет кода?
Как изменить текст цитаты защищённой паролем записи
Тут мы опять обращаемся к помощи функции post_password_required(), а также фильтру the_excerpt.
add_filter( 'the_excerpt', 'true_protected_excerpt_text' ); function true_protected_excerpt_text( $excerpt ) { if ( post_password_required() ) { $excerpt = '<em>[Запись заблокирована. Для получения пароля обратитесь к администратору.]</em>'; } return $excerpt; // если запись не защищена, будет выводиться стандартная цитата }
Кроме того, используя предыдущий пример, вы даже сможете вывести форму ввода пароля.
Как полностью скрыть с сайта все записи, защищенные паролем
В этом нам поможет потрясающий хук pre_get_posts. Использование этого хука не вызовет проблем с постраничной навигацией, что важно.
/* * Небольшая модификация для SQL запроса, получающего посты */ function true_exclude_pass_posts( $where ) { global $wpdb; return $where .= " AND {$wpdb->posts}.post_password = '' "; } /* * При помощи этого фильтра определим, на каких именно страницах будет скрывать защищенные посты */ add_action( 'pre_get_posts', 'true_where_to_exclude' ); function true_where_to_exclude( $query ) { if( is_home() || is_archive() ) { add_filter( 'posts_where', 'true_exclude_pass_posts' ); } }