Кто уже перешёл на новую версию WP 3.1, наверняка заметил ряд нововведений. Среди них есть и не очень приятные. Перестали работать следующие плагины, работавшие в WP 3.0:

  • Exclude Category;
  • Advanced Category Excluder;
  • и прочие, назначением которых было исключение с главной страницы сайта и из RSS постов выбранных рубрик (зачем это нужно — читай здесь [1]);
  • Также несовместимость WP 3.1 с плагином Simple Tags приводит к тому, что рубрики не отображаются (требуется отключить плагин).

Полазив полчаса по буржуйскому core.trac.wordpress.org, я нашёл решение для WP 3.1, чтобы нежелательные для главной и RSS записи исключались, как прежде.

Данный вопрос считаю актуальным для блогеров, потому как некоторые из них таким образом строят свой Интернет-бизнес, что рекламные статьи проходят мимо внимания постоянных читателей. А появление в RSS-читалках преданных читателей рекламных статей может вызвать массовую отписку самого ценного контингента сайта.

Для исправления этого глюка (или фишки) новой версии WordPress нам следует отредактировать файл темы functions.php. Напоминаю, что редактировать файлы темы следует либо встроенным в движок редактором, либо продвинутым текстовым редактором, например NotePad++, но не стандартным блокнотом Windows. (Update: теперь я разработал и более простое решение, которое избавить вас от необходимости вносить изменения в код.)

В этот файл необходимо добавить следующий код (можно вначале сразу после <?php):

function exclude_category($query) {
	if ( $query->is_home )
		$query->set( 'category__not_in', array( 1, 2, 3 ) );
	else if ( $query->is_feed and ! $query->is_single and ! $query->is_archive )
		$query->set( 'category__not_in', array( 2, 3, 4 ) );
	return $query;
}
add_filter('pre_get_posts', 'exclude_category');

Здесь вместо «1,2,3» необходимо через запятую перечислить номера своих категорий, посты которых вы хотите избавить от попадания на главную страницу сайта, а «2,3,4» — номера рубрик, посты которых исключены из RSS. Номера списков могут совпадать (если посты рубрики исключены одновременно и с главной, и с RSS), а могут различаться, если посты какой-то рубрики исключены только с главной, а некоторой другой — только из RSS. Номер рубрики быстро определить можно следующим образом. Переходим в нужную рубрику блога. Теперь для залогиненных пользователей вверху страницы блога отображается плавающая панелька со ссылками для быстрого доступа к нужным разделам администрирования. Наводим курсор на меню панельки «Изменить рубрику», как показано на рисунке (кликабельно):

При этом в статусной строке браузера видим ссылку, которая у меня заканчивается таким образом: tag_ID=104 — это значит, что номер рубрики — 104. Так вычисляем номера всех рубрик с исключёнными постами.

Это всё. Пока больше проблем с WP 3.1 не заметил. Но зато порадовался некоторым нововведениям. Их описывать не буду, предоставлю вам самим возможность стать первооткрывателями. 🙂

Update 24.03.2011

Заметил, что изначальный мой код (сейчас его уже заменил, и код выше — корректен) блокировал не только попадание записей в основную RSS блога, но и во все прочие тоже. Например, невозможно будет посмотреть RSS исключённой рубрики, да и подписка на RSS комментариев к посту, который в исключённой рубрике, будет также невозможна. Хоть тема специфическая (потому не сразу заметил просчёт), тем не менее, опубликовал код, который только запретит постам из исключённой рубрики попадать в основную RSS блога, но не будет препятствовать просмотру этих постов в RSS архивов, рубрик, а также подписке на комментарии по RSS на посты исключённых рубрик. Т.о. (см. код выше), посты рубрик 2, 3, 4 можно будет видеть в RSS-лентах архивов и категорий. А также этот код не препятствует созданию фидов комментариев к постам, скрытым от основной ленты.

Update 29.11.2013

Всё-таки я сделал это: написал плагин, позволяющий не только удобным образом из админки в пару кликов скрывать посты рубрики, но также скрывать посты определённой метки, и даже произвольные посты из редактора записи. Качаем плагин тут [2].

Запись опубликована 24 февраля 2011 года. Пост окончен, но в рубрике «Web-кодинг» есть не менее интересные посты:

Подписка на RSS канал блога RSS подписка (как это?) поможет вам не пропустить ничего интересного на этом блоге.