Как запретить вывод определённой записи или рубрики на главной странице сайта и т.д

О том, как запретить отображение (вывод) определённой статьи (записи) на главной странице или страничках архивов — рубрик, тегов, страниц поиска… в этой статье и разберёмся.

Решая нынешнюю задачу, рассмотрим несколько вариаций кодов:

Таким образом добьёмся наилучшего результата настройки структуры сайта, чтобы посетителю было удобнее ориентироваться, а нам, как админам, покойно на душе))

как исключить конкретную запись по id на главной страничке сайта

…вот и ловкий код для легендарного файла функций либо же плагина, который решит вопрос исключения определённых записей с главной страницы, либо любых архивов любо настроить:

/** исключим конкретные записи с главной **/
function exclude_post($query) {
if ($query->is_home)
{$query->set('post__not_in', array(4) );} // id записи (поста) - возможно указывать несколько id через запятую
return $query; 
}
add_filter('pre_get_posts','exclude_post');
/** исключим конкретные записи с главной **/

Теория кода:

Создаём такой запрос (относительно отдельных записей post) к базе данных exclude_post($query); далее указываем страницу для обработки запросом: у нас это is_home.

Далее создаём (скажем так — правило обработки и фильтра на отдачу информации из БД по запросу) исключения объекта из запроса: т.е запрос возвратится без указанного объекта — id 4.

return $query; } указание на то, что основной запрос к БД $query теперь отработает и  возвратит выборку с нашими коррективами — без id 4 — посредством фильтра финальной строки.

Что и требовалось!

Это я максимально упрощённо пытался пояснить, понятности ради. А в более техническом ключе излагается в кодексе вордпресс, правда, многие темы не переведены толком.

А вообще, у меня в листе дофолоу есть ссылка на один хороший сайт wp-kama, на его страничках есть много полезного и по-русски сказанного)) хотя и несколько сложновато для новичка, но если хотите пройдите, ознакомьтесь.

Теперь по логике показанного выше кода разберёмся…

как исключить записи в каких-то иных страницах архивов

По коду выше видно, что ключевая логика работы кода заключается в условии is_home, а значит в строке 2:

if ($query->is_home)

следует, для необходимого результата исключений, всего-то заменить условный тег на нужный. Например, чтобы исключить определённую запись со странички архивов категорий, надлежит поменять условный тег на is_category и указать id записи — и всего делоф…

Во второй строке кода должно получиться так:

if ($query->is_category)

И так далее, манипулируя условными тегами…

  1. is_home() — главная
  2. is_search() — страница поиска
  3. is_category() — категории (рубрики)
  4. is_tag() — теги (метки)
  5. is_archive() — страницы архивов
  6. is_author() — страницы авторов
  7. is_feed() — фид
  8. is_year() — дата — год
  9. is_month() — общее время

Если кто-то использует на сайте странички архивов по датам, или странички авторов (коли на сайте автор не один) — поступаете аналогично описанному принципу выше, добавляя соответствующие условные теги.

А вот статья, изучив которую можно выучиться как исключить из индексации странички архивов, авторов: это полезно в качестве избавления от «соплей» — дублей страниц.

как исключить некоторые категории с главной страницы

…ну, например так…

/** исключим категории полностью **/
function exclude_cat($query) {
if ($query->is_home)
{$query->set('cat','-1, -22, -37');} // id требуемых категорий
return $query; }
add_filter('pre_get_posts','exclude_cat');
/** фин - исключим категории полностью **/

Однако в мире известны случаи, когда админ требователен в своих желаниях: ему требуется так, что нужно исключить вывод записей одновременно и с домашней страницы (главной) и с каких-то иных, например, категорий…

В этом случае можно поступить разно:

1 — дописать добавочный пример кода с необходимыми параметрами (условных тегов) для выборки из Базы Данных только указанных записей.

2 —…чтобы не громоздить много лишнего кода, …возможно комбинировать уже имеющийся код — добавляя соответствующие условные теги…

Посмотрите внимательно на следующий пример: в показанном выше коде, нужно заменить вторую строку на эту.

if ($query->is_category || ($query->is_home))

…или просто добавить к уже существующему у вас коду другие необходимые теги-условия (в цикле которых необходимы исключения).

Добавляется каждый параметр через две вертикальные скобки || (разделитель) который условно заменяют if.

как исключить из «поиска по сайту» постоянные страницы

В самом деле, зачем они нужны в результате поиска?? незачем! Ну, по крайней мере, некоторые из них — точно..!

…чтобы напрочь исключить в результатах поиска по сайту постоянные страницы:

достаточно прописать к себе в файл функций (или добавочный файл функций functions.php — плагин — что весьма правильнее) такой код:

/** исключим постоянные страницы из результатов поиска **/
function search_filter($query) {
if ( ! is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
}
}
add_action( 'pre_get_posts', 'search_filter' );
/** исключим постоянные страницы из результатов поиска **/

И здесь, как и во всех показанных кодах, мы воспользовались таким хуком из арсенала вордпресс: pre_get_posts — чтобы исключить из результатов поиска постоянные страницы

Готово дело!..

Однако — теперь узнаем решение ещё одного схоластического требования админа: (и это желание логично: уж коли однажды создали произвольный тип записей, то, возможно, включить эти записи в поиск по сайту весьма и весьма целесообразно)

включить в поиск по сайту произвольные типы записей

…блажь включения в поиск произвольных типов записей запросто решить так:

Вот такой код запишите на постоянное место жительства в файл функций, или плагин:

/** включаем в поиск произвольные "типы" записей **/
function get_posts_search_filter( $query ){
if ( ! is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set('post_type', array('post', 'my-tv') );
}
}
add_action('pre_get_posts', 'get_posts_search_filter');
/** включаем в поиск произвольные "типы" записей **/

…где my-tv — имя произвольного типа.

Ну вот как бы и всё… если что не ясно, спрашивайте …есть же комментарии…

Источник: https://mihalica.ru/

Добавить комментарий