» » » Перенаправление встроенных в WordPress RSS каналов на ленту Feedburner
logotip

Перенаправление встроенных в WordPress RSS каналов на ленту Feedburner

Всем привет! Сегодня на seo-mayak.com я хочу закончить две темы, которые я развивал в последнее время — это настройка feedburner и порядок в header.

Займемся мы переадресацией RSS WordPress на ленту feedburner, разберемся с ссылками на RSS каналы в исходном коде, а также я познакомлю Вас с функцией add_action().

При регистрации в feedburner, сервис с легкостью определяет какие RSS каналы используются на регистрируемом сайте. Но как он это делает?

Все просто, feedburner переходит по указанному доменному адресу и ищет в исходном коде строчки, в которых содержится информация о используемых на том или ином ресурсе RSS потоках.

perenapravlenie na feedburner

На моем блоге изначально было два 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.

До встречи!

С уважением, Виталий Кириллов

Комментарии: 12

  1. Марина:

    Спасибо. Полезная для меня статья.

    Ответить
    • Виталий Кириллов:

      Пожалуйста Марина, рад видеть Вас на блоге!

      Ответить
  2. Александра:

    Добрый день! Может быть подскажите какой-то хук или код для functions php, чтобы в ленте фида выводилось определенное количество статей?
    В админке Вордпресс (Праметры Чтение) выставлено 7, но все равно выводится 20. В настройках фидбернера не нашла ничего, плагины не хочу ставить. Нашла один рецепт, но он не работает — «http://blogger…..ru/feeds/posts/default?max-results=18,число статей в фиде с 24 до 18».

    Ответить
    • Виталий Кириллов:

      Здравствуйте Александра! Я посмотрел ваш фид и у Вас там отображается 6 заголовков последних статей. Наверное просто обновился фид, обновление происходит раз в сутки. Еще вопросы?

      Ответить
  3. Александра:

    Спасибо за ответ! Правда, я смотрела свой фид через Подписки Яндекс почты, именно там выводится 20 статей, если стоит флажок на «развернуть все». Наверное, это в настройках самой почты 🙁

    Ответить
  4. Анастасия:

    Виталий, подскажите, пожалуйста! что-то с rss лентой случилось. Перестала обновляться. мойсайт.ru/feeв — встроенная лента обновляется, а feeds.feedburner.com/мойсайт.ru — перестала. Не пойму, что случилось…

    Ответить
    • Виталий Кириллов:

      Анастасия, прочтите вот этот кусочек стати и думаю там вы найдете все ответы.

      Ответить
  5. Елена:

    Добрый день, Виталий!
    Подскажите, а код, который вы советуете вставить в funtions.php, в каком именно месте его вставлять, чтобы не навредить (((

    Ответить
    • Виталий Кириллов:

      Елена, вставьте код в самое начала файла, после «<?php».

      Ответить
  6. sanya:

    На одном из моих сайтов (шаблон переделывал из очень старой темы) 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="» />
    Могу ли я удалить вторую? спаибо

    Ответить
    • Виталий Кириллов:

      Конечно можете.

      Ответить
  7. Лора:

    добрый день!
    У меня почему-то не устанавливается показанный здесь код для редиректа рсс-ленты на фидбернер(( Пишет ошибка.
    То есть я просто не могу пересохранить изменения в function.php
    Возможно, Вы мне что-то посоветуете?

    Ответить

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

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS