Блог о SEO оптимизация и поисковое продвижение
24 Фев
Кто уже перешёл на новую версию WP 3.1, наверняка заметил ряд нововведений. Среди них есть и не очень приятные. Перестали работать следующие плагины, работавшие в WP 3.0:
Полазив полчаса по буржуйскому 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 подписка (как это?) поможет вам не пропустить ничего интересного на этом блоге.
На «WordPress 3.1 — исключённые посты появились на главной и в RSS» получено 44 отзыва
Действительно, вопрос актуальный, у меня одна из версий этого плагина портила внешний вид блога, так я до сих пор на старой версии и боюсь переходить на новую, чтобы не портить жизнь и бизнес.
Большое спасибо за найденное решение проблемы. У Меня так пара «ненужных» постов таки улетела в rss.
Поставил на эту статью ссылку в заметке на моем блоге.
Еще раз спасибо!
У меня такой вопрос.
А если мне надо чтобы на главной не отображалось 4 категории, а в РСС не уходило 3 из них, то как вод надо модифицировать
В ПХП не шарю, поэтому задаю такой вопрос
Дмитрий, пользуйтесь наздоровье 🙂
Andrew, вот код для вашего случая:
Обновился до 3.1 и ужаснулся — сайт перестал работать нормально — рубрики не загружаются! Выяснил в чем дело. Оказывается эта версия конфликтует с плагином Simple Tags.
Сергей, спасибо за подсказку. Теперь ясно, что Simple Tags в новой версии WP 3.1 тоже пока лучше не использовать, иначе рубрики не отображаются
Спасибо! К сожалению, сначала не уследил — десяток ненужных постов вывалились на главную и в rss. Теперь решил проблему.
Я предпочитаю пользоваться редактором PhpExpertEditor. Новую версию WP еще не обновлял, ща попробую. ух!
Огромное спасибо за инфу и еще так хорошо разжеванную. Я около месяца назад начала создавать сайт и являюсь полным чайником во всяких html кодах и т.п. Сделала рубрику с мультиками, но раздражало, что они все вылезали на главную страницу. И тут, о чудо, случайно наткнулась на эту статью. Все сделала, как было указано. Эврика! Все получилось.
Спасибо. Значит, мой труд не напрасен 😉
Спасибо за решение проблемы! У меня после обновления 3.1, тоже всплыла скрытая категория на главной. Это был неприятный сюрприз.
Спасибо за полезный пример, тоже долго искал как вордпрес настроить. Но у меня вот такая проблема как сделать так что бы все страницы скрыть а оставить только первую? код мне понятен только вот приходиться в ручную все страницы прописывать есть ли пример array от 2 до бесконечности или до 500 ???
function exclude_category($query) { if ( $query->is_feed or $query->is_home ) { $query->set('category__not_in', array(1,2,3));
Не знаю, что вы имеете ввиду, Mr.Freen, но создать массив значений можно в цикле. Скажем, вот так:
$mass = array(); for ($i=1; $i<=500; $i++) $mass[] = $i;
А потом использовать этот массив:
$query->set('category__not_in', $mass);
Но не хотите ли вы сказать, что у вас 500 рубрик?
Спасибо большое Хайпер Вы очень помогли, нет конечно у меня не 500 страниц просто надо было указать диапозон что бы не прописывать все в ручную.
У меня проблема не разрешилась. Правда, шаблон я собирал сам, но на других моих wordpress сайтах тоже не работает.
После установки этого кода с главной страницы исчезли ненужные посты. И не только. С главной страницы вообще все исчезло! И пишет: ничего не найдено! Не знаю, что делать. Поможешь разобраться?
Александр в коде есть цифры
$query->set ('category__not_in', array (1,2,3));
под цифрой подразумевается № рубрики(статьи) если у вас от 1 до ... то соответственно на первой странице ничего не будет так как вы сами все исключили с главной страницы. Я лично указал от 2 до ... страницы так как мне надо было всего лишь одна страница на первой полосе а не несколько 🙂 Удачи
Спасибо огромное! Уже 2 недели ищу ответ на этот вопрос и нашел его на вашем блоге! Подписываюсь!
Думал, что нашел решение проблемы у вас, ан нет... У меня материалы-страницы (а не записи) вылезают. То есть у с рубриками все норм, а вот если есть родительская страница, у которой есть несколько других, то эти-то страницы и вылезают. Хайпер, может вы знаете, как сделать так, чтобы страницы из родительской страницы не появлялись на гл.?
Craig, у вас какой-то специфический случай. Я вообще не встречал такого, чтобы страницы (не записи) появлялись на главной и в RSS. Зайдите на страницу контактов и свяжитесь со мной. Разберёмся
Наткнулся на статью немного по-другой проблеме, но может сможете помочь? В сайдбаре вывожу блок ссылок на некоторые рубрики сайта, можно ли этот блок выводить только в определенных рубриках?
Смогу помочь. Вам надо сделать проверку условия:
if (is_category (array (3, 'Создание сайтов', 'poiskovye-sistemy'))) { /* ваш блок */ }
В этом случае блок будет выведен только в рубриках: с id = 3, с названием 'Создание сайтов', с ярлыком 'poiskovye-sistemy'.
Само собой, вы можете пользоваться для определения нужных рубрик только их номерами, или именами, или ярлыками. Здесь я привёл общий случай
Фантастика! Действительно, то что нужно! Спасибо огромное!
Здравствуйте, подскажите, пожалуйста, можно ли сделать так, чтобы определенные записи не отображались только в RSS ленте, но были доступны на главной странице блога.
Заранее спасибо.
Здрасте. Да, это возможно. Посмотрите код в конце поста. Там как раз посты рубрики с кодовым номером 4 не попадут в RSS, но будут на главной. Т.е. в вашем случае поменяйте 4 на номер вашей рубрики (или номера рубрик через запятую), а остальной код можете оставить без изменений
Спасибо огромное за помощь 🙂
У меня после перехода на новую версию WP перестала отображаться RSS . по ссылке сайт//feed/ показывает пустую страницу, подскажите в чем может быть проблема?
Первый раз о таком слышу, Антон. Попробуйте на локальном хосте установить новую сборку, и в неё импортировать базу данных и файлы темы оформления и плагинов. Если заработает, просто обновите сайт на сервере с локальной версии
у мну почему-то возникли глюки с Advanced Category Excluder еще в wp2.9, странно. жаль нет плагина который бы исключал пост с морды и rss при помощи опции на странице редактирования, и без привязки к категориям.
Хм... Интересная мысль. Я даже знаю, как это можно реализовать с помощью произвольных полей к записи... Правда, до реализации в этой жизни, скорее всего, не доберусь 🙂
Подскажите, что делать — RSS вообще пропала. На прошлой неделе проверяла на валидность и было все в порядке, а теперь появляется надпись
This page contains the following errors:
error on line 2 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.
Я уже и плагины, что за вид RSS отвечают отключила, но не помогло. Не помню точно, до проверки валидности или позже, но последним действием с блогом была установка плагина All in One SEO Pack, но его отключение не помагает
alf2011, что-то у вас и сайт совсем не открывается
Пропал вчера вечером:) Только новый пост вывесила и хотела проверить будет ли работать отложенная публикация постов в RSS ленте. Тут и выяснилось, что пропала лента, а потом и сам сайт. Пытаюсь теперь достучатся до хостера:))
Все оказалось до безобразия просто, нужно было вместо стандартного адреса ленты прописать адрес через feedburner и лента появилась. У меня на блоге бесплатная переводная тема, наверное в ней есть какая-то ошибка
alf2011, рад, что ваш сайт снова работает, да и RSS заработала тоже
Спасибо, вставил код в блог-все заработало. Мой первый сайт теперь будет выглядеть «правильнее».
Здравствуйте. Озадачился похожей ситуацией. Я хочу что бы у меня на главную выводило только заданные категории. Попробовал изменить только один параметр — вместо category__not_in поставил следующее:
function exclude_category ($query) {
if ( $query->is_feed or $query->is_home ) {
$query->set ('category__in', array (3,7,9,10,8));}
return $query;
}
add_filter ('pre_get_posts', 'exclude_category');
Сработало. Стало выводить только нужные категории, но куда то пропало главное меню сайта. Подскажите правильный вариант вывода на главную только заданных категорий.
Код, вроде, правильный. Не понимаю, как это может быть связано с главным меню сайта
Добрый день! С удовольствием прочитал Вашу статью. Давно искал решение указанной проблемы. Работаю на денвере. Вставил указанный Вами код в functions.php шаблона. Затем по адресу страницы /?p=125 я в array (1,2,3) вместо 1,2,3 вставил 125, но на главной странице этот пост так и красуется. А мне надо, чтобы он на главной странице не выводился. Что я сделал неправильно, не подскажете, дорогой автор?
Спасибо, рад слышать! 125 — это у вас номер поста, а в array (...) надо вставлять номер рубрики, посты в которой вы не желаете видеть на главной (и/или в основной RSS-ленте), Например, есть рубрика «Оффтоп», которая открывается по адресу /?cat=75, тогда в соответствующем месте functions.php у вас будет array (75).
Можно попробовать этот способ. Кажется очень лёгким.
Ещё заметил когда ставишь этот код (первый или обновлённый), то почему-то виджет с последними записями перестаёт показываться. Не подскажите в чём проблема?
Не знаю, в чём проблема. По идее, не должно влиять — у меня на нескольких сайтах стоит, и последние записи в виджете отображаются нормально
А можно так сделать, чтобы не целую категорию запрещать, а отдельные посты?
Алексей, возможно. Для этого надо использовать фильтры предварительной обработки контента. В частности, для RSS: the_excerpt_rss и the_content_feed. А для определения тех самых постов, которые не надо выводить, можно использовать произвольные поля.
Ваше SEO-мнение
Я прошу высказать своё мнение, а не оставить ссылку на раскручиваемый сайт. В любом случае, ссылки в комментариях у меня закрыты от индексации, если интересует качественный обмен ссылками -обращайтесь