Всем привет! Сегодня на seo-mayak.com я хочу закончить две темы, которые я развивал в последнее время — это настройка feedburner и порядок в header.
Займемся мы переадресацией RSS WordPress на ленту feedburner, разберемся с ссылками на RSS каналы в исходном коде, а также я познакомлю Вас с функцией add_action().
При регистрации в feedburner, сервис с легкостью определяет какие RSS каналы используются на регистрируемом сайте. Но как он это делает?
Все просто, feedburner переходит по указанному доменному адресу и ищет в исходном коде строчки, в которых содержится информация о используемых на том или ином ресурсе RSS потоках.
На моем блоге изначально было два RSS-канала — это RSS 2.0, который находится по адресу:
/feed
И RSS Atom, живущий тут:
/feed/atom
Вопрос в том, зачем мне стандартные RSS каналы, если я завел ленту feedburner? Получается, что в feedburner я зарегистрировался, а исходном коде у меня по-прежнему находится ссылки на RSS 2.0 и RSS Atom.
Непорядок! Надо это дело поправить. Поехали!
Избавляемся от стандартных RSS в WordPress
Открываем файл header.php и ищем что-то похожее на такие строчки:
<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" /> <link rel="alternate" type="application/atom+xml" title="<?php bloginfo('name'); ?> Atom Feed" href="<?php bloginfo('atom_url'); ?>" />
У тех, кто сокращал количество запросов к БД по моей статье, избавляясь от функции bloginfo(), данные строчки должны выглядеть так:
<link rel="alternate" type="application/rss+xml" title="SEO Маяк RSS Feed" href="/feed" /> <link rel="alternate" type="application/atom+xml" title="SEO Маяк Atom Feed" href="/feed/atom" />
Конечно, с учетом Вашего домена.
Что нам надо сделать? Нам надо вместо ссылок на встроенные в WordPress RSS каналы поставить ссылку на ленту feedburner. Код должен выглядеть так:
<link rel="alternate" type="application/rss+xml" title="SEO Маяк RSS Feed" href="http://feeds.feedburner.com/seo-mayakcom" />
Удаляем две строчки вставляем одну. Надеюсь понятно.
Ну хорошо, ссылки из исходного кода мы убрали, но сами RSS каналы-то остались. Давайте разберемся и с этой проблемой, но прежде мне придется отклониться от основной темы статьи и познакомить Вас с функцией add_action().
Функция add_action().
Функция add_action() является регистратором хуков, таких как wp_head(), о которой я подробно рассказывал в недавней статье и многих других.
Когда мы добавляли свои кнопки в редактор TinyMCE (стандартный редактор WordPress), то как раз регистрировали новое действие с помощью функции add_action().
Но само понятие «Регистрация» не дает четкого представления о том, что происходить в глубине сознания WordPress, при активации функции add_action().
Рассмотрим такой пример. Допустим я сделал новый фавикон для своего блога. Теперь мне надо вывести ссылку на местоположение картинки в header, чтобы поисковики нашли изображение фавикона и приняли его в «оборот».
Можно конечно напрямую прописать ссылку в файле header.php между тегами <head></head>, но для примера я сделаю это с помощью простенькой хук-функции:
function mayak_favicon() { echo '<link rel="icon" href="/wp-content/themes/wp-themes-blogger/images/fav.ico" type="image/x-icon" />'; }
Понятно, что mayak_favicon() — это произвольное название новой функции, а echo — это команда, с помощью которой ссылка будет выведена на экран.
Сама по себе такая функция работать не будет, так как WordPress не поймет, где должна выводиться данная строчка: в подвале, в сайдбаре или каком ином месте. Одним словом функция не зарегистрирована и WordPress о ней ничего неизвестно.
Поэтому я дописываю к функции еще одну строчку:
add_action( 'wp_head', 'mayak_favicon' );
Первым параметром задается название функции, над которой будет произведено подготовленное действие. В данном случаи знакомый нам хук wp_head, который и укажет WorsPewss, что ссылка должна отобразится между тегами <head></head>. Вторым параметром прописывается название самого действия (название написанной мной функции).
Тем самым я регистрирую написанное мной действие и изменяю работу функции wp_head(), добавляя новую ссылку в header. В качестве «обработчика» или «приемщика» регистрации хука выступает другая функция —do_action(), но об этом в другой раз. Подписывайтесь на обновления блога и непременно узнаете много интересного.
add_action() используют разные плагины, подключая я ядру WordPress свой функционал. Например плагин All in One SEO Pack.
Итак, с функцией add_action() мы немного разобрались, самое время вернутся к основной теме статьи.
Перенаправление встроенных в WordPress RSS каналов на ленту feedburner
Само слово «Перенаправление» подразумевает редирект. В сети полно информации о том, как перенаправить RSS потоки, посредством добавления кода в файл .htaccess. Сей код выглядит так:
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/Ваш фид/ [R=302,NC,L]
В данном случаи, для перенаправления используется 302 редирект (R=302). Я сейчас не буду вдаваться в сравнения 301 редиректа c 302 редиректом и т.д , об этом обязательно расскажу в будущих статья.
Хочу сказать другое. На своем кулинарном сайте я побывал использовать перенаправление через .htaccess и вскоре отказался от данного варианта, так как лента feedburner постоянно ломалась.
Поломки были разные, но самое плохое заключалось в том, что с выходом новой статьи, лента не всегда обновлялась и соответственно не всегда отправлялись сообщения о новой публикации моим подписчикам. Поэтому мне пришлось отказаться от варианта с .htaccess и искать другое решение.
Если у Вас 302 редирект через .htaccess работает корректно, прошу отписаться в комментариях.
В ходе изучения PHP я наткнулся на хук template_redirect, который разработчики WordPress предусмотрели для случаев, когда надо подключить иной шаблон для определенной страницы сайта.
Как оказалось можно воспользоваться данным хуком для перенаправления RSS потоков WordPress на feedburner.
Для этого в файл funtions.php надо вставить следующий код:
function mayak_redirect_feed() { if ( is_feed() && !preg_match('/feedburner|feedvalidator/i', $_SERVER['HTTP_USER_AGENT'])){ header('Location: http://feeds.feedburner.com/Ваш фид'); } } add_action('template_redirect', 'mayak_redirect_feed');
Давайте я немного поясню, что это за функция.
1. Первую строчку я трогать не буду, так как надеюсь, что всем понятно, почему функция называется mayak_redirect_feed().
2. Во-второй строчке, с помощью функции preg_match(), устраивается проверка, является ли данная страница фидом, а также собирается информация о типе и версии браузера и операционной системы посетителя, что по-моему, кроме всего, помогает отсеивать ботов.
3. В третьей строке с помощью функции header() происходит отправка серверу HTTP заголовка, в данном случаи мы отправляем адрес нашего фида. Еще указывается вид HTTP заголовка «Location:», что позволяет не только отправить заголовок, но получить код состояние «REDIRECT (302)», т.е произойдет перенаправление встроенных RSS WordPress на указанный адрес ленты feedburner.
4. Наконец в четвертой строке, с помощью функции add_action() регистрируем новое действие и цепляем его к хуку template_redirect.
Теперь, если в адресной строке браузера набрать:
http://Ваш сайт/feed
или
http://Ваш сайт/feed/atom
Произойдет перенаправление на Ваш RSS канал в feedburner.
До встречи!
С уважением, Виталий Кириллов
Спасибо. Полезная для меня статья.
Пожалуйста Марина, рад видеть Вас на блоге!
Добрый день! Может быть подскажите какой-то хук или код для functions php, чтобы в ленте фида выводилось определенное количество статей?
В админке Вордпресс (Праметры Чтение) выставлено 7, но все равно выводится 20. В настройках фидбернера не нашла ничего, плагины не хочу ставить. Нашла один рецепт, но он не работает — «http://blogger…..ru/feeds/posts/default?max-results=18,число статей в фиде с 24 до 18».
Здравствуйте Александра! Я посмотрел ваш фид и у Вас там отображается 6 заголовков последних статей. Наверное просто обновился фид, обновление происходит раз в сутки. Еще вопросы?
Спасибо за ответ! Правда, я смотрела свой фид через Подписки Яндекс почты, именно там выводится 20 статей, если стоит флажок на «развернуть все». Наверное, это в настройках самой почты 🙁
Виталий, подскажите, пожалуйста! что-то с rss лентой случилось. Перестала обновляться. мойсайт.ru/feeв — встроенная лента обновляется, а
feeds.feedburner.com/мойсайт.ru
— перестала. Не пойму, что случилось…Анастасия, прочтите вот этот кусочек стати и думаю там вы найдете все ответы.
Добрый день, Виталий!
Подскажите, а код, который вы советуете вставить в funtions.php, в каком именно месте его вставлять, чтобы не навредить (((
Елена, вставьте код в самое начала файла, после «<?php».
На одном из моих сайтов (шаблон переделывал из очень старой темы) 3 строчки:
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" data-link="» />
<link rel="alternate" type="text/xml" title="RSS .92" data-link="» />
<link rel="alternate" type="application/atom+xml" title="Atom 0.3" data-link="» />
Могу ли я удалить вторую? спаибо
Конечно можете.
добрый день!
У меня почему-то не устанавливается показанный здесь код для редиректа рсс-ленты на фидбернер(( Пишет ошибка.
То есть я просто не могу пересохранить изменения в function.php
Возможно, Вы мне что-то посоветуете?