Это очередная статья по 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:
- Автоматический вывод рекламных блоков в WordPress
- Постраничная навигация WordPress без плагина
- Произвольные меню в WordPress
- Ускорение загрузки сайта WordPress
- Похожие записи для WordPress
- Аудиоплеер для WordPress
- Установка Google Adsense на WordPress
- Руководство по созданию сайта на WordPress
- Руководство по обновлению WordPress
- Шорткоды в WordPress
На этом данная небольшая статья подошла к концу. Если вы не хотите пропустить выпуска других полезных статей, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.
На этом все. Удачи вам и успехов в создании сайтов!
Спасибо за полезные функции!
У меня появился вопрос: вот, мы добавили функцию в functions.php, но ведь её откуда-то надо вызвать? где это делать для страницы с записями? в Index.php?
В данном случае после добавления функции в functions.php ее вызывать нигде не нужно. Она сама подключится. Это достигается за счет использования другой функции add_filter().
Подскажите пожалуйста, как правильно поправить functions.php. Я один раз попробовала — пришлось переустанавливать всю тему((( Уже боюсь и трогать…
Спасибо!
Ответ прост — изучить синтаксис и базовые основы PHP и не допускать ошибок при редактировании кода:)
Спасибо мужик! Все заработало! А то плагин ACE начал конфликтовать с WP3.7. Да и вообще прекрасно, что есть решения задачи без установки плагинов.
Всегда рад помочь.
функции работают, нежелательные статьи не отображаются на главной странице. но после их установки статьи не открываются для их чтения. Их можно увидеть, но когда вы нажимаете на них, вы не можете читать весь контент. может быть, что-то не хватает в коде?
Helga, попробуйте добавить в начало функции следующий код:
if ( is_admin() || ! $query->is_main_query() ) {
return $query;
}