Как исключить записи категорий с главной страницы, страниц поиска и RSS ленты в WordPress

Logo

Это очередная статья по WordPress и в ней я хотел бы поговорить о таком важном моменте, как исключение записей с главной страницы WordPress. Эта задача постает перед вебмастерами очень часто, и я здесь не исключение. В связи с открытием рубрики «Ответы на вопросы» мне тоже понадобилось исключить записи категории с главной страницы. Именно поэтому я решил сразу написать данную статью, чтобы не забыть об этом в будущем.

Способов исключения записей рубрик в WordPress существует несколько, но я рассмотрю только тот, который использую сам лично. Он основывается на добавлении специального кода в файл темы оформления function.php. Это очень удобно, так как вносить изменения придется только в один файл, а не в несколько.

Исключение записей категорий с главной страницы WordPress

Для того, чтобы исключить записи определенной рубрики, прежде всего, нужно узнать ее идентификатор. Проще всего это сделать, скопировав нужный идентификатор со ссылки. Для этого идем в Административную панель – Записи – Рубрики, выбираем нужную рубрику и в адресной строке ищем идентификатор.

http://kofemaniya.com/wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=7&post_type=post

В данном случае ID рубрики будет равняться 7.

Далее нам нужно открыть на редактирование файл темы оформления function.php и добавить в него следующий код:

function removeFromHome($query) {
if ($query->is_home) {
$query->set('cat','-7');
}
return $query;
}
add_filter('pre_get_posts','removeFromHome');

Код лучше добавлять в конец файла перед закрытием php-блока «?>». Если такого блока нет, то просто добавляем код в конец файла. Сразу хочу заметить, что данный код позволит исключить записи категории с идентификатором 7 не только с главной страницы, но и со страниц, образованных постраничной навигацией. Это одна их особенностей работы php-функции WordPress is_home().

Для исключения не одной рубрики, а сразу нескольких, перечисляем их идентификаторы через запятую, как это показано в следующем примере:

function removeFromHome($query) {
if ($query->is_home) {
$query->set('cat','-7,-9,-15');
}
return $query;
}
add_filter('pre_get_posts','removeFromHome');

Если вы хотите исключить записи категории только с главной страницы сайта и оставить их на всех остальных, то воспользуйтесь следующим кодом:

function removeFromHome($query) {
if ($query->is_home && !(is_paged())) {
$query->set('cat','-7');
}
return $query;
}
add_filter('pre_get_posts','removeFromHome');

Как вы уже заметили, код практически не изменился. Добавилась лишь еще одна функция определения страницы WordPress.

Исключение записей категорий с RSS ленты WordPress

Исключение записей рубрики WordPress с RSS ленты может понадобиться в том случае, если вы не хотите уведомлять подписчиков об обновлении какого-то раздела. В этом случае добавьте в файл function.php следующий код:

function removeFromFeed($query) {
if ($query->is_feed) {
$query->set('cat','-7');
}
return $query;
}
add_filter('pre_get_posts','removeFromFeed');

Исключение записей категорий одновременно с главной страницы и RSS ленты WordPress

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

function removeFromFeedHome($query) {
if ($query->is_feed || ($query->is_home && !(is_paged()))) {
$query->set('cat','-7');
}
return $query;
}
add_filter('pre_get_posts','removeFromFeedHome');
Исключение записей рубрики со страницы поиска WordPress

Также иногда бывает необходимо исключить записи рубрики из поиска. Не знаю, зачем это может понадобиться, но поскольку люди интересуются, то приведу пример кода для исключения записей со страницы поиска WordPress.

function removeFromHome($query) {
if ($query->is_search) {
$query->set('cat','-7');
}
return $query;
}
add_filter('pre_get_posts','removeFromHome');

Рекомендую также почитать следующие статьи по WordPress:

На этом данная небольшая статья подошла к концу. Если вы не хотите пропустить выпуска других полезных статей, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.

На этом все. Удачи вам и успехов в создании сайтов!

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Комментарии 6

  • Александр

    Спасибо за полезные функции!
    У меня появился вопрос: вот, мы добавили функцию в functions.php, но ведь её откуда-то надо вызвать? где это делать для страницы с записями? в Index.php?

  • Дмитрий

    В данном случае после добавления функции в functions.php ее вызывать нигде не нужно. Она сама подключится. Это достигается за счет использования другой функции add_filter().

  • Маша

    Подскажите пожалуйста, как правильно поправить functions.php. Я один раз попробовала — пришлось переустанавливать всю тему((( Уже боюсь и трогать…
    Спасибо!

  • Дмитрий

    Ответ прост — изучить синтаксис и базовые основы PHP и не допускать ошибок при редактировании кода:)

  • Альберт

    Спасибо мужик! Все заработало! А то плагин ACE начал конфликтовать с WP3.7. Да и вообще прекрасно, что есть решения задачи без установки плагинов.

  • Дмитрий

    Всегда рад помочь.

Оставить комментарий

отменить ответ