Скрываем статью с главной страницы и не только
Не знал, что актуально скрыть статью с главной страницы. А нет, оказывается актуально для блогеров статейщиков. Скрывая записи с лены на главной страницы они, вроде как, не дают простым пользователям просматривать проходные статьи. Спорный момент…
Так вот. Как сие реализовать? Очень просто. можно конечно воспользоваться плагином, но это не наш метод. Мы ведь не ищем легких путей?! Итак, самый простой вариант использовать произвольные поля (метабоксы).
к содержаниюСоздаем нужное поле
Для создания поля будем использовать плагин Advanced Custom Fields. Функционала бесплатной версии более чем достаточно. Прежде чем создать поле, требуется создать группу полей
Затем уже в группе создать поле
И заполнить нужные поля
Тип поля выбираем Истина/Ложь. По окончании заполнения полей не забываем нажать кнопку Обновить
к содержаниюМагия хука pre_get_posts
Поле у нас есть, теперь надо заставить его работать. Для исключения записи из цикла главной страницы будем использовать хук pre_get_posts
, который и позволяет производить манипуляции с циклом. Более подробно можно прочитать у Камы здесь.
Скрываем запись с главной
Чтобы скрыть только с главной используем условный тег is_home
и нужная функция будет выглядеть так
// скрываем помеченные посты с главной
function art_exclude_posts($query) {
if (is_admin())
return $query;
$exclude = array();
if ( $query->is_main_query() && (is_home()) ) { // здесь добавляем нужные уcловные теги
$posts = get_posts(array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'art_exclude_home', // название поля
'value' => '1',
'compare' => '=',
),
),
));
foreach($posts as $hide) {
$exclude[] = $hide->ID;
}
$query->set('post__not_in', $exclude);
}
return $query;
}
add_filter( 'pre_get_posts', 'art_exclude_posts' );
Добавьте сей код в файл function.php
Скрываем запись с главной и страницы архивов
Чтобы убрать еще из ленты рубрик воспользуемся тегом is_archive
и получим
// скрываем помеченные посты с главной
function art_exclude_posts($query) {
if (is_admin())
return $query;
$exclude = array();
if ( $query->is_main_query() && (is_home() || is_archive() ) ) { // здесь добавляем нужные уcловные теги
$posts = get_posts(array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'art_exclude_home', // название поля
'value' => '1',
'compare' => '=',
),
),
));
foreach($posts as $hide) {
$exclude[] = $hide->ID;
}
$query->set('post__not_in', $exclude);
}
return $query;
}
add_filter( 'pre_get_posts', 'art_exclude_posts' );
к содержанию
Скрываем запись с главной страницы, страницы архивов и RSS
Так как при публикации запись отправляется в RSS-ленту, то чтобы полноценно скрыть воспользуемся тегом is_feed
. Получим такой код
// скрываем помеченные посты с главной
function art_exclude_posts($query) {
if (is_admin())
return $query;
$exclude = array();
if ( $query->is_main_query() && (is_home() || is_archive() || is_feed()) ) { // здесь добавляем нужные уcловные теги
$posts = get_posts(array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'art_exclude_home', // название поля
'value' => '1',
'compare' => '=',
),
),
));
foreach($posts as $hide) {
$exclude[] = $hide->ID;
}
$query->set('post__not_in', $exclude);
}
return $query;
}
add_filter( 'pre_get_posts', 'art_exclude_posts' );
Вот и все:) Более подробно в видео
П.С. Задавайте вопросы в комментариях и не забывайте подписываться на канал WPRUSe