Как добавить альтернативный 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 изображения поста.