Создаем собственную RSS ленту в WordPress. Часть 1

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

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

  • Заголовок
  • Ссылка
  • Дата публикации
  • Автор
  • Выдержка из записи

Прежде всего вам нужно создать новую рсс ленту в файле functions.php вашей темы или в плагин для сайта WordPress:

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

Код выше вызывает функцию customRSS, которая и добавляет фид. Функция add_feed имеет 2 параметра: feedname (имя фида) и callback (функция его вызова). feedname создаст ссылку на ваш новый фид yourdomain.com/feed/feedname, а callback, в свою очередь, будет вызвана уже для его создания. feedname понадобится нам позже.

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

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

Код выше использует функцию get_template_part для связи с отдельным файлом шаблона, однако вы также можете поместить код RSS прямо в функцию. Используя get_template_part мы сохраняем функционал отдельно от разметки. У функции get_template_part есть два параметра, slug и name, которые будут искать файл шаблона с именем в определенном формате, начиная с первого файла (если он не существует, то переходим ко второму и так далее):

  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

В целях тестирования примеров этой статьи лучше для начала установить slug типом фида, который мы создаем (в нашем случае: rss), а имя для feedname мы указали ранее.

После того, как мы сообщили WordPress о том, что нужно искать шаблон фида, нам нужно создать его. Код ниже сформирует разметку для фида с информацией, которую мы озвучили ранее.
Once you’ve told WordPress to look for the feed template, you’ll need to create it. The below code will produce the layout for the feed with the information we listed earlier. Save this file in your theme folder as the slug-name.php template file configured in the get_template_part function.

<?php
/**
 * Template Name: Custom RSS Template - Feedname
 */
$postCount = 5; // количество записей для отображения в фиде
$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 слов контента поста.

И, наконец, для вывода вашего фида необходимо обновить правила .htaccess. Самый простой способ это сделать — залогиниться в админку ВП, кликнуть на Настройки -> Постоянные ссылки. Когда окажетесь там, просто нажмите на Сохранить изменения, правила обновятся.

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

W3C предлагает сервис валидации фидов, чтобы проверить его на корректность и соответствие стандартам.

Продолжение статьи читайте по ссылке Создаем собственную RSS ленту в WordPress. Часть 2

VN:F [1.9.22_1171]
Rating: 2.3/5 (3 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top