Создаем свой собственный RSS-фид в WordPress

Дата публикации:Октябрь 16, 2013

WordPress поставляется вместе со встроенными стандартными RSS-фидами. Вы можете настраивать стандартные фиды путем добавления произвольного контента, включать миниатюры в фид и т.д. Стандартных фидов RSS и Atom вполне достаточно для большинства пользователей, однако у вас может возникнуть желание создать произвольный RSS-фид для какого-либо определенного типа контента. В данной статье мы покажем вам, как создать свои собственные RSS-фиды в WordPress.

Предположим, что вы хотите создать новый RSS-фид, который будет отображать следующую информацию:

  • Заголовок
  • Ссылка
  • Дата публикации
  • Автор
  • Цитата

Первое, что вам понадобится сделать – это создать новый RSS-фид в файле темы functions.php:

add_action('init', 'customRSS');
function customRSS(){
        add_feed('feedname', 'customRSSFunc');
}

Приведенный выше код инициирует функцию customRSS, которая добавляет фид. Функция add_feed имеет два аргумента – название фида feedname, а также callback-функция. Фид с названием feedname будет доступен по адресу yourdomain.com/feed/feedname. Callback-функция требуется для процедуры создания фида.

Как только вы проведете инициализацию фида, вам понадобится создать callback-функцию для генерации требуемого фида, что делается с помощью следующего кода в файле темы functions.php:

function customRSSFunc(){
        get_template_part('rss', 'feedname');
}

В коде выше используется функция get_template_part для связи с отдельным шаблоном, однако вы можете также помещать RSS-код прямо в функцию. С помощью get_template_part мы можем отделить функциональность от разметки. Функция get_template_part имеет два аргумента – слаг и название, которые ищут шаблон с названием в следующем формате, начиная с самого первого файла (и следуя далее, если первый файл не найден):

  1. wp-content/themes/child/rss-feedname.php
  2. wp-content/themes/parent/rss-feedname.php
  3. wp-content/themes/child/rss.php
  4. wp-content/themes/parent/rss.php

В нашем руководстве слаг будет задан как тип фида, который мы создадим (в данном случае: rss). Название нашего фида будет feedname.

После того, как вы сообщите WordPress, что нужно найти шаблон фида, вам понадобится его создать. Следующий код обеспечит разметку для фида с информацией, перечисленной нами ранее. Сохраняем этот файл как slug-name.php в папке с нашей темой.

<?php
/**
 * Template Name: Custom RSS Template - Feedname
 */
$postCount = 5; // The number of posts to show in the feed
$posts = query_posts('showposts=' . $postCount);
header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
?>
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        <?php do_action('rss2_ns'); ?>>
<channel>
        <title><?php bloginfo_rss('name'); ?> - Feed</title>
        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
        <link><?php bloginfo_rss('url') ?></link>
        <description><?php bloginfo_rss('description') ?></description>
        <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
        <language><?php echo get_option('rss_language'); ?></language>
        <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
        <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
        <?php do_action('rss2_head'); ?>
        <?php while(have_posts()) : the_post(); ?>
                <item>
                        <title><?php the_title_rss(); ?></title>
                        <link><?php the_permalink_rss(); ?></link>
                        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
                        <dc:creator><?php the_author(); ?></dc:creator>
                        <guid isPermaLink="false"><?php the_guid(); ?></guid>
                        <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
                        <content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
                        <?php rss_enclosure(); ?>
                        <?php do_action('rss2_item'); ?>
                </item>
        <?php endwhile; ?>
</channel>
</rss>

Приведенный выше код шаблона будет генерировать RSS-фид, следуя указанной разметке. Переменная postCount позволит нам управлять количеством записей, выводимых в фиде. Шаблон может быть исправлен в зависимости от того, какую информацию вы хотите выводить (изображения записей, комментарии и т.д.).

Функция the_excerpt_rss  выводит цитату каждой записи. Для записей, у которых не заданы цитаты, функция выведет первые 120 слов контента.

Наконец, чтобы вывести фид, вы должны будете сначала очистить ваши правила перезаписи. Самый простой способ сделать это – зайти в админку WordPress и щелкнуть по пункту Параметры – Постоянные ссылки. Просто щелкните по кнопке «Сохранить изменения», что приведет к очистке правил перезаписи.

Теперь вы можете получить доступ к вашему новому фиду по адресу yourdomain.com/feed/feedname, где feedname – это название фида, которое вы установили ранее в функции add_feed.

W3C предлагает сервис валидации фида, позволяющий вам проверить корректность созданного фида.

Решение проблем

При попытке просмотра моего фида вылезает ошибка 404!

  • Убедитесь в том, что вы используете корректное название фида в вашем URL-адресе. Оно задается в функции add_feed.
  • Если вы используете корректное название фида, обновите ваши правила перезаписи. Сделать это можно, пересохранив свои постоянные ссылки.
  • Если вы пересохранили свои постоянные ссылки, вы можете сбросить правила перезаписи через файл своей темы functions.php. Добавьте следующий код к функции customRSS, созданной ранее. Убедитесь в том, что вы добавили код после функции add_feed:
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
  • Как только вы добавите этот код, перезагрузите ваш WP сайт. Примечание: этот код нужно будет удалить сразу после использования. Одного раза вполне достаточно для сброса правил.

Мой фид не прошел проверку валидности!

W3C валидатор фида должен выдать определенную информацию, в которой будет указано, почему фид не прошел проверку. Отредактируйте шаблон фида, чтобы избавиться от этих проблем.

Я столкнулся с <language /> ошибкой валидации!

Это популярная ошибка, которая вылезает в том случае, если язык RSS не задан в вашей сборке WordPress. Чтобы исправить это, добавьте следующий код к вашему файлу темы functions.php:

function rssLanguage(){
        update_option('rss_language', 'en');
}
add_action('admin_init', 'rssLanguage');

Отредактируйте второй аргумент функции update_option, чтобы задать требуемый язык.

Как только код, представленный выше, будет добавлен к вашему файлу functions.php, перейдите к админке WordPress. После этого действия код должен быть удален из файла функций. Одноразовой загрузки будет вполне достаточно для настройки параметра rss_language.

Сделать это можно также через базу данных, отыскав опцию rss_language в таблице wp_options.

Источник: wpbeginner.com

Поделиться

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.