Как добавить альтернативный RSS‑фид в WordPress: пошаговое руководство (2026)

Почему нужен собственный RSS‑фид?

Стандартный RSS‑канал WordPress выводит только заголовок, excerpt и контент. Часто требуется добавить дополнительные метаданные (например, цену продукта, рейтинг или рекламный блок), либо сформировать фид только из определённого типа записей. Создание собственного фида дает полную свободу и улучшает SEO‑показатели за счёт уникального контента.

Шаг 1. Регистрация кастомного фида

Для начала регистрируем новый endpoint в functions.php. WordPress предоставляет хук init и функцию add_feed():

add_action( 'init', function() {
    add_feed( 'custom', 'my_custom_rss_feed' ); // /feed/custom/ будет доступен
} );

function my_custom_rss_feed() {
    get_template_part( 'feed', 'custom' ); // подключаем шаблон feed-custom.php
}

После этого по адресу https://example.com/feed/custom/ будет доступен наш фид.

Шаг 2. Шаблон фида: вывод произвольных записей

Создайте файл feed-custom.php в корне темы. В нём будем формировать XML‑строку вручную, используя WP_Query для выборки нужных постов.

<?php
header( 'Content-Type: application/rss+xml; charset=' . get_option( 'blog_charset' ), true );
echo "n";
?>
    
    
     'post',
        'posts_per_page' => 20,
        'post_status'    => 'publish',
    );
    $query = new WP_Query( $args );
    while ( $query->have_posts() ) : $query->the_post();
    ?>

      <![CDATA[]]>
      <![CDATA[]]>

?>

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

Шаг 3. Добавление произвольных полей в элемент <item>

Допустим, у записей есть пользовательское поле price. Выведем его в виде собственного тега price.

Можно добавить любые метаданные: рейтинг, авторскую ссылку, ID продукта и т.д. Главное – соблюдать XML‑синтаксис (CDATA, если значение содержит специальные символы).

Шаг 4. Вставка рекламного блока в RSS

Рекламные сообщения часто размещаются в конце каждой записи. Для примера добавим простой HTML‑баннер, получаемый из опции темы.

Администратор может задать код баннера в Настройки → RSS‑реклама (пример страницы). Такой подход позволяет менять рекламный контент без правки кода.

Шаг 5. Кеширование RSS‑фида

Генерация XML‑фида на каждый запрос – лишняя нагрузка. Кешируем результат в объектный кэш (Redis или Memcached). Ниже пример с использованием wp_cache_set() и wp_cache_get():

function my_custom_rss_feed() {
    $cache_key = 'custom_rss_feed';
    $cached    = wp_cache_get( $cache_key );
    if ( false !== $cached ) {
        // Отдаём кеш без генерации
        echo $cached;
        return;
    }

    // Если кеша нет – генерируем фид в буфер
    ob_start();
    get_template_part( 'feed', 'custom' );
    $output = ob_get_clean();

    // Сохраняем в кэш 12 часов
    wp_cache_set( $cache_key, $output, '', 12 * HOUR_IN_SECONDS );
    echo $output;
}

Для ускорения сброса кэша при публикации новых записей добавим хук:

add_action( 'save_post', function() {
    wp_cache_delete( 'custom_rss_feed' );
} );

Если ваш сайт использует Redis или Memcached, то кэш будет храниться в памяти и отдавать фид за миллисекунды.

Шаг 6. Тестирование и отладка

Проверьте валидность XML‑ленты с помощью W3C Feed Validator. Если в ленте появляются ошибки, проверьте наличие закрывающих CDATA‑тегов и корректность пользовательских полей.

Для разработки удобно включить отладку WordPress:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );

Логи появятся в wp-content/debug.log, где можно увидеть любые PHP‑ошибки, связанные с генерацией RSS.

Заключение

Создание собственного RSS‑фида в WordPress – это комбинация регистрации нового endpoint, написания шаблона XML, добавления кастомных полей, рекламных блоков и кэширования результата. Такой подход повышает гибкость контент‑стратегии, улучшает SEO‑показатели и позволяет монетизировать ленту без сторонних сервисов.

Не забывайте периодически проверять кэш и обновлять рекламный блок через безопасные WPDB‑запросы, чтобы ваш фид оставался актуальным.

❓ Часто задаваемые вопросы

Можно ли создать несколько разных RSS‑фидов одновременно?

Да, достаточно вызвать add_feed() с разными slug и подключить отдельные шаблоны (feed‑custom1.php, feed‑custom2.php). Каждый файл может иметь свою логику выборки и выводимых полей.

Как добавить поддержку пагинации в кастомный фид?

Передайте параметр paged в WP_Query и сформируйте ссылки <link rel="next"> и <link rel="prev"> в блоке <channel>. WordPress автоматически распознает ?paged=2 в URL фида.

Что делать, если кэш не обновляется после публикации новой записи?

Убедитесь, что хук save_post вызывается; проверьте, что ключ кэша совпадает с тем, что используется в wp_cache_set(). При использовании внешних кеш‑провайдеров очистите их вручную.

Можно ли добавить в RSS‑ленту элементы <code>media:content</code> для изображений?

Да, подключите пространство имён xmlns:media="http://search.yahoo.com/mrss/" в корневой rss и внутри <item> выводите <media:content url="…" type="image/jpeg"/> с URL изображения поста.