• доступно о веб-разработке
09.12.2015 PHP, Wordpress, Движки, О сайте, Технологии

Как настроить вывод RSS в WordPress

Стандартный вывод RSS-потока из WordPress удовлетворяет немногих — в нём нет изображения к новости, а сам текст зачатую оказывается обрезан троеточием на конце. Но и из этой ситуации есть выход. Какой? Об этом в данном материале.

Для кросс-постинга в социальные сети я вот уже почти год использую по-своему уникальный сервис NovaPress.

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

Для получения информации требуется её источник.

Одним из основных источников является RSS-канал.

Так вот, если указывать стандартный RSS-канал обычного WordPress-блога, то на выходе мы можем получить нечто не совсем притязательное:

Что-то в таком духе(да простят меня коллеги по цеху):

Как исправить ситуацию в пользу вот такого результата?

Банально, текст в RSS – это текст до «ката» + картинка к записи Featured Image.

Здесь нам на помощь прийдёт плагин:

Feed Template Customize

Как видите из описания, его функционал достаточно простой. Он подменяет при помощи хуков стандартные шаблоны вывода.

Готовы исправить ситуацию с неприглядным RSS? Поехали.

  1. Копируем файл /wp-includes/feed-rss2.php в корень текущего шаблона сайта /wp-content/themes/текущий_шаблон/.
  2. Заменяем:
    while( have_posts()) : the_post();
    ?>
    <item>
    <title><?php the_title_rss() ?></title>
    <link><?php the_permalink_rss() ?></link>
    <?php if ( get_comments_number() || comments_open() ) : ?>
    <comments><?php comments_link_feed(); ?></comments>
    <?php endif; ?>
    <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><![CDATA[<?php the_author() ?>]]></dc:creator>
    <?php the_category_rss('rss2') ?>
    
    <guid isPermaLink="false"><?php the_guid(); ?></guid>
    <?php if (get_option('rss_use_excerpt')) : ?>
    <description><![CDATA[<?php the_excerpt_rss(); ?>]]></description>
    <?php else : ?>
    <description><![CDATA[<?php the_excerpt_rss(); ?>]]></description>
    <?php $content = get_the_content_feed('rss2'); ?>
    <?php if ( strlen( $content ) > 0 ) : ?>
    <content:encoded><![CDATA[<?php echo $content; ?>]]></content:encoded>
    <?php else : ?>
    <content:encoded><![CDATA[<?php the_excerpt_rss(); ?>]]></content:encoded>
    <?php endif; ?>
    <?php endif; ?>
    <?php if ( get_comments_number() || comments_open() ) : ?>
    <wfw:commentRss><?php echo esc_url( get_post_comments_feed_link(null, 'rss2') ); ?></wfw:commentRss>
    <slash:comments><?php echo get_comments_number(); ?></slash:comments>
    <?php endif; ?>
    <?php rss_enclosure(); ?>
    <?php
    /**
    * Fires at the end of each RSS2 feed item.
    *
    * @since 2.0.0
    */
    do_action( 'rss2_item' );
    ?>
    </item>
  3. На:
    while( have_posts()) : the_post();
    
    $data = get_extended( $post->post_content );
    $intro = strip_tags(apply_filters('the_content',$data['main']),'<a><p><b><i><u>');
    ?>
    <item>
    <title><?php the_title_rss() ?></title>
    <link><?php the_permalink_rss() ?></link>
    <comments><?php comments_link_feed(); ?></comments>
    <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><![CDATA[<?php the_author() ?>]]></dc:creator>
    <?php the_category_rss('rss2') ?>
    
    <guid isPermaLink="false"><?php the_guid(); ?></guid>
    <?php if (get_option('rss_use_excerpt')) : ?>
    <description><![CDATA[<?php if(!empty($data['extended'])): echo $intro; else: the_excerpt_rss(); endif;?>]]></description>
    <?php else : ?>
    <description><![CDATA[<?php if(!empty($data['extended'])): echo $intro; else: the_excerpt_rss(); endif;?>]]></description>
    <?php $content = get_the_content_feed('rss2'); ?>
    <?php if ( strlen( $content ) > 0 ) : ?>
    <description><![CDATA[<?php if(!empty($data['extended'])): echo $intro; else: $content; endif;?>]]></description>
    <?php else : ?>
    <content:encoded><![CDATA[<?php the_excerpt_rss(); ?>]]></content:encoded>
    <?php endif; ?>
    <?php endif; ?>
    <?php if(has_post_thumbnail()):?>
    <?php
    $thumb = wp_get_attachment_url( get_post_thumbnail_id($post->ID));
    $mime = image_type_to_mime_type(exif_imagetype($thumb));
    ?>
    <enclosure url="<?php echo $thumb?>" type="<?php echo $mime?>" />
    <?php endif?>
    <wfw:commentRss><?php echo esc_url( get_post_comments_feed_link(null, 'rss2') ); ?></wfw:commentRss>
    <slash:comments><?php echo get_comments_number(); ?></slash:comments>
    <?php rss_enclosure(); ?>
    <?php
    /**
    * Fires at the end of each RSS2 feed item.
    *
    * @since 2.0.0
    */
    do_action( 'rss2_item' );
    ?>
    </item>
  4. Проверяем RSS-поток по адресу http://ваш_сайт.ru/feed:

    Обратите внимание, что должно отрабатываться изображение к посту.
    Если, вдруг, фид не обновляется, значит он закешировался в браузере. Надо просто добавить к адресной строке любой GET-запрос. Например, http://ваш_сайт.ru/feed?123.

  5. Радуемся жизни.

Можно использовать альтернативный метод, без плагина.

Для этого в файл functions.php вашей текущей темы сайта необходимо добавить следующий функционал:

remove_all_actions( 'do_feed_rss2' );
add_action( 'do_feed_rss2', 'rewrite_rss2', 10, 1 );

function rewrite_rss2(){
$rss_template = get_template_directory() . '/feed-rss2.php';
load_template($rss_template);
}

На сегодня всё.

 

 

Поделиться

Комментарии Правила дискуссии

Читайте ранее:
Как сократить потребление памяти WordPress до 10Мб

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

Закрыть