Дизайн та розробка сайту

Как исключить записи и рубрики из вывода WordPress

Убрать записи из главной

Доброго времени суток 🙂

Сегодня хочу затронуть одну из популярных тем, которая касается WordPress. Если Вы владеете своим блогом использующим WordPress, то возможно столкнулись с надобностью исключить вывод определенных записей или даже рубрик из цикла на главной странице, например. Схожим может быть исключение записей и рубрик из поиска, rss ленты и архивов статей.

Убрать записи из главной

Когда возникает такая необходимость? Например, вы распределили материалы своего сайта по рубрикам, а в некоторых Вам нужно добавить материал, который не совсем соответствует тематике сайта, но все же необходим и Вы не хотите. чтобы он светился на главной или вообще появлялся в ненужных местах. Он должен быть доступен только по определенной ссылке.

В моей практике, очень часто встречаются ситуации когда нужно отфильтровать содержимое главной страницы и других разделов. Для того чтобы это сделать понадобится сделать совсем не много. Исключить записи и рубрики из цикла можно с помощью функций, добавленных в файл 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');

Статья получилась не маленькой, но если разобраться то сложного ничего нет.

На этом все, спасибо за внимание. 🙂

Дизайн та розробка сайту

Back to top