Как спрятать защищенные паролем посты из цикла WordPress
По умолчанию WordPress скрывает содержимое защищенных паролем постов, но он все равно показывает заголовок поста с префиксом Protected. В этой статье мы расскажем вам как спрятать защищенные паролем посты из цикла WordPress.
Зачем прятать защищенные паролем посты?
Заголовок поста защищенного паролем все равно всплывает на главной странице сайта, в списке недавних постов, архивах и так далее. Если вы хотите максимальную приватность контента, то это не очень классно. Также это дает возможность пользователям, у которых нет паролей, попробовать их ввести.
Скрытие защищенных паролем постов в Вордпрессе
Просто добавьте этот код в файл functions.php
function wpb_password_post_filter( $where = '' ) { if (!is_single() && !is_admin()) { $where .= " AND post_password = ''"; } return $where; } add_filter( 'posts_where', 'wpb_password_post_filter' );
Все, что делает этот код, это просто меняет запрос, отправленный на WordPress с помощью фильтра posts_where. Он просит Вордпресс собирать все посты, у которых нет пароля. Зайдите на свой сайт и вы увидите, что ваши защищенные паролем посты больше не видны на главной странице, архивах или в виджетах.
Вы до сих пор можете зайти в пост через прямую ссылку на него. Пример выше скрывает защищенные паролем посты от всех пользователей. Что, если вы управляете многоавторским сайтом и хотите, чтобы защищенные паролем посты были видны пользователям с правами редактирования приватных постов? Просто измените код выше другим тегом:
function wpb_password_post_filter( $where = '' ) { if (!is_single() && !current_user_can('edit_private_posts') && !is_admin()) { $where .= " AND post_password = ''"; } return $where; } add_filter( 'posts_where', 'wpb_password_post_filter' );
В этом примере мы проверяем может ли пользователь редактировать посты, защищенные паролем. Если нет, то ему показывает только посты, у которых нет паролей.
Наша специальность — разработка и поддержка сайтов на WordPress. Контакты для бесплатной консультации — [email protected], +371 29394520
Ответить
Хотите присоединиться к обсуждению?Не стесняйтесь вносить свой вклад!