Когда возникает такая необходимость? Например, вы распределили материалы своего сайта по рубрикам, а в некоторых Вам нужно добавить материал, который не совсем соответствует тематике сайта, но все же необходим и Вы не хотите. чтобы он светился на главной или вообще появлялся в ненужных местах. Он должен быть доступен только по определенной ссылке.
В моей практике, очень часто встречаются ситуации когда нужно отфильтровать содержимое главной страницы и других разделов. Для того чтобы это сделать понадобится сделать совсем не много. Исключить записи и рубрики из цикла можно с помощью функций, добавленных в файл functions.php Вашей темы WordPress
Начнем по порядку, первая функция будет исключать записи из определенных категорий. Например Вам нужно исключить записи из рубрик с айди 1 и 2. То есть будут исключены полностью все записи из данных рубрик.
Чтобы определить айди рубрик, нужно в админке перейти в список рубрик и навести курсором на нужную. Внизу окна браузера с правой стороны появится ссылка внутри которой будет что-то типа ID=1, то есть айди этой рубрики 1.
Открываем functions.php для редактирования и в самый его конец, перед закрывающим тегом PHP - ?>, если его нет, то просто в конце добавляем такую функцию:
function exclude_category($query) { if ($query->is_home){ $query->set('cat','-1, -2');} return $query; } add_filter('pre_get_posts','exclude_category');
В третей строке указываем айди рубрик с отрицательным значением, записи из которых нужно исключить, как и говорил в примере это рубрики с айди 1 и 2.
Теперь рассмотрим случай как исключить записи из архивов WordPress. Делаем все по принципу первого метода.
function exclude_category($query) { if ($query->is_archive){ $query->set('cat','-1, -2');} return $query; } add_filter('pre_get_posts','exclude_category');
Третий вариант, это как исключить записи из результатов поиска WordPress. Так же добавляем функцию в functions.php
function exclude_category($query) { if ($query->is_search){ $query->set('cat','-1, -2');} return $query; } add_filter('pre_get_posts','exclude_category');
ну и последний, исключение из RSS ленты.
function exclude_category($query) { if ($query->is_feed){ $query->set('cat','-1, -2');} return $query; } add_filter('pre_get_posts','exclude_category');
Вы могли заметить что условие где исключать записи задается во второй строке всех функций.
- $query->is_home - исключение из главной страницы.
- $query->is_archive - из архивов
- $query->is_search - из поиска
- $query->is_feed - из RSS.
Далее идет уже более масштабное исключение, которое позволит убрать записи одновременно с главной страницы, rss ленты, архивов и поиска. То есть предыдущие три варианта объединены в одну функцию, что довольно удобно. Так что если Вам нужно исключить сразу в нескольких местах, то такой вариант Вам лучше всего подойдет.
function exclude_category($query) { if ($query->is_feed || ($query->is_home || ($query->is_search || ($query->is_archive)))){ $query->set('cat','-1, -2');} return $query; } add_filter('pre_get_posts','exclude_category');
Теперь давайте рассмотрим тот случай когда нужно исключить не целую рубрику, а только определенные записи. То есть рубрика будет выводится как есть за исключением лишь нескольких записей. В этом нам поможет схожие функции, которые и сделают всю работу.
Первая функция исключит определенные записи с главной страницы.
function exclude_post($query) { if ($query->is_home) {$query->set('post__not_in', array(55, 56) );} return $query; } add_filter('pre_get_posts','exclude_post');
Как видите мы исключаем записи с айди 55 и 56. Айди записей можно узнать аналогичным способом как и айди рубрик. То есть заходите в список записей, находите нужную, наводите курсор на ее название и внизу смотрите в ссылке ее айди.
Как исключить определенные записи из RSS.
function exclude_post($query) { if ($query->is_feed) {$query->set('post__not_in', array(55, 56) );} return $query; } add_filter('pre_get_posts','exclude_post');
Как исключить определенные записи из поиска.
function exclude_post($query) { if ($query->is_search) {$query->set('post__not_in', array(55, 56) );} return $query; } add_filter('pre_get_posts','exclude_post');
Как исключить определенные записи из архивов.
function exclude_post($query) { if ($query->is_archive) {$query->set('post__not_in', array(55, 56) );} return $query; } add_filter('pre_get_posts','exclude_post');
Как исключить определенные записи из всего вышеприведенного сразу.
function exclude_post($query) { if ($query->is_feed || ($query->is_home || ($query->is_search || ($query->is_archive)))){ $query->set('post__not_in', array(55, 56) );} return $query; } add_filter('pre_get_posts','exclude_post');
Статья получилась не маленькой, но если разобраться то сложного ничего нет.
На этом все, спасибо за внимание. 🙂