Фиды (RSS) в WordPress
Фиды в WordPress - это формат вывода записей или комментариев в специальном формате. Это тоже самое, что вывод записей на главной станице, только в особом формате, который создается по определенным стандартам и который может прочитать и понять программа-собиратель лент новостей.
Фиды используются, например, программой, которая собирает последние публикации с разных сайтов, среди них есть ваш сайт (ваш фид). Чтобы эта программа смогла понять где заголовок записи, а где контент - фиды всех сайтов имеют одинаковый формат - это общепринятый стандарт. Таких стандартов несколько: RSS
, RSS2
, Atom
, RDF
. В последнее время почти всегда используется RSS2
.
В предыдущих версиях WordPress генерировал формат фида RSS-0.92
, но теперь этот формат редиректит на RSS-2.0
. Однако шаблон этого старого формат присутствует в ядре.
-
Для работы с фидами смотрите функцию fetch_feed()
-
Примеры изменения фидов смотрите в подборке хуков для фидов.
- Проверить фид: https://validator.w3.org/feed/
Как работают фиды в WordPress
Для начала стоит сказать, что фиды текущего сайта WordPress не кэшируются. Кэширование происходит в браузере, чтобы его обойти обновляйте страницу через Сtrl + F5. Или можно добавить такой хук:
## отключим кэширование в барузере для запросов фидов add_filter( 'wp_headers', function($headers){ if( !empty($GLOBALS['wp']->query_vars['feed']) ){ unset( $headers['ETag'], $headers['Last-Modified'] ); } return $headers; });
Как работает запрос фида
После загрузки всего ВП и установки текущего запроса и его параметров вызывается файл template-loader.php
, в нем после проверки is_feed()
вызывается функция do_feed()
.
Далее, если в запросе не был указан конкретный тип фида, то он определяется функцией get_default_feed()
(через её хук можно изменить тип фида по умолчанию).
Далее, вызывается динамический хук do_feed_(feed):
do_action( "do_feed_{$feed}", $wp_query->is_comment_feed, $feed );
К каждому варианту этого хука в WP по умолчанию подключена функция (см. default-filters.php):
add_action( 'do_feed_rdf', 'do_feed_rdf', 10, 1 ); add_action( 'do_feed_rss', 'do_feed_rss', 10, 1 ); add_action( 'do_feed_rss2', 'do_feed_rss2', 10, 1 ); add_action( 'do_feed_atom', 'do_feed_atom', 10, 1 );
Т.е. в зависимости от типа фида, срабатывает одна из функций, которая подключает нужный файл шаблона, который в свою очередь генерирует HTML код страницы фида.
Обычно срабатывает функция do_feed_rss2()
:
function do_feed_rss2( $for_comments ) { if ( $for_comments ) load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' ); else load_template( ABSPATH . WPINC . '/feed-rss2.php' ); }меню
Как отключить фиды в WordPress
Для этого нужно открепить все функции фидов от хуков:
remove_action( 'do_feed_rdf', 'do_feed_rdf', 10, 1 ); remove_action( 'do_feed_rss', 'do_feed_rss', 10, 1 ); remove_action( 'do_feed_rss2', 'do_feed_rss2', 10, 1 ); remove_action( 'do_feed_atom', 'do_feed_atom', 10, 1 );
Теперь при заходе на страницу фида, например /feed
, мы увидим 404 страницу с сообщением:
Так как фидов у нас теперь нет, также нужно удалить ссылки на фиды из wp_head
:
add_action( 'wp', function(){ remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'rsd_link' ); });
Читайте также: Удаление фидов, кроме фида на главной станице
Типы контента и форматы фидов
Теперь, когда мы разобрались с тем, что такое фиды, посмотрим какие виды контента предоставляет WordPress в формате фида:
Тип фида | Пример URL |
---|---|
Последние записи (главный фид) | http://example.com/feed/ |
Последние комментарии (главный фид) | http://example.com/comments/feed/ |
Комментарии указанного поста | http://example.com/2009/07/post-name/feed/ |
Комментарии указанной страницы | http://example.com/archives/feed/ |
Записи за день, месяц, год, рубрика, метка | http://example.com/2010/feed/ , http://example.com/2010/10/feed/ , http://example.com/tag/tag-name/feed/ |
Записи для указанного параметра запроса поиска | http://example.com/search/term/feed/ |
Вместо /feed/
в конце может быть использованы и другие типы RSS:
- Atom –
/atom/
- RDF –
/rdf/
- RSS2 –
/feed/
,/feed/rss/
или/feed/rss2/
URL (ссылки) фидов в WordPress
Ссылки (ЧПУ) для фидов всех записей
http://example.com/feed/
(RSS 2.0 формат)http://example.com/feed/rss2/
(RSS 2.0 формат)http://example.com/feed/rss/
(RSS 0.92 формат)http://example.com/feed/rdf/
(RDF/RSS 1.0 формат)http://example.com/feed/atom/
(Atom формат)
Ссылки (не ЧПУ) для фидов всех записей
http://example.com/wp-rss2.php
(RSS 2.0 формат)http://example.com/wp-rss.php
(RSS 0.92 формат)http://example.com/wp-rdf.php
(RDF/RSS 1.0 формат)http://example.com/wp-atom.php
(Atom формат)
Ссылки (не ЧПУ) для фидов всех записей через параметр запроса
http://example.com/?feed=rss2
(RSS 2.0 формат)http://example.com/?feed=rss
(RSS 0.92 формат)http://example.com/?feed=rdf
(RDF/RSS 1.0 формат)http://example.com/?feed=atom
(Atom формат)
В какой опции хранится каждая ссылка на фид
Когда нужно получить ссылку на дефолтный фид указанного вида, можно использовать функции получения опций сайта (информации о сайте):
<?php bloginfo('rss2_url'); ?> <!-- RSS 2.0 формат --> <?php bloginfo('rss_url'); ?> <!-- RSS 0.92 формат --> <?php bloginfo('rdf_url'); ?> <!-- RDF/RSS 1.0 формат --> <?php bloginfo('atom_url'); ?> <!-- Atom формат -->
Ссылки на фид всех комментариев WordPress
http://example.com/comments/feed/
(ЧПУ формат)http://example.com/wp-commentsrss2.php
(дефолтный формат)http://example.com/?feed=commentsrss2
(формат с параметров запроса)
В какой опции хранится ссылка на фид всех комментариев:
<?php bloginfo('comments_rss2_url'); ?>
Ссылка на комментарии указанного поста
<?php comments_rss_link('Подпишитесь на комментарии этой записи по RSS-2.0 фиду'); ?>
Другой вариант вывести ссылку на фид комментариев указанного поста - это добавить в конец постоянной ссылки feed/
(для ЧПУ) или ?feed=rss2
(если ЧПУ отключено). Т.е. в результате получим:
http://example.com/individual-post/feed/
(ЧПУ формат)http://example.com/individual-post/?feed=rss2
(дефолтный формат)
Также ссылка на фид комментов поста, может выглядеть так, если отключены красивые URL (ЧПУ). Ниже p - это ID записи.:
http://example.com/?feed=rss2&p=123
Ссылки на фид записей из рубрики
http://example.com/category/categoryname/feed/
(ЧПУ формат)http://example.com/wp-rss2.php?cat=33
(дефолтный формат)
PHP шаблоны фидов WordPress (файлы)
Какие файлы движка отвечают за вывод какого фида.
Фиды записей:
- /wp-includes/feed-atom.php
- /wp-includes/feed-rdf.php
- /wp-includes/feed-rss.php
- /wp-includes/feed-rss2.php
Каждый файл отвечать за свой тип фида.
feed-rss.php
- считается устарелым форматом.
Окончание /feed
относится к файлу feed-rss2.php
.
Фиды комментариев:
менюФункции фидов
Смотрите в файле: /wp-includes/feed.php
У меня на сайте закралось пару пробелов (или даже три) в rss-фид (в самом начале, перевод строки): http://tatar-congress.org/ru/feed/
из-за этого некоторые трансляторы в соцсети не принимают такой файл. Я уже всё перерыл, что мог, что знал и не знал... Не могу найти траблу.
Хотелось бы спросить - не существуют ли каких либо альтернативных способов отдавать rss-фид (хуков каки нибудь, например, или фильтров).
К слову сказать, я использовал следующий кусок кода в functions.php, который к постам прилепляет миниатюры, и очищает контент записи от вложенных галерей:
но и закомментировав его - проблема не исчезла. Понять не могу, как быть..
Отключай по очереди все плагины, все коды. Это может быть из за любого кода. Скорее всего это где-то в коде в конце закрываться
?>
и после этого парочка переносов...У тебя это и на самом сайте, не только в фидах...
К сожалению, не спасло. Выключил абсолютно все плагины. Два перевода каретки остались на месте
я думаю, что тут наверное нужен какой то фильтр, который будет принимать на входе этот rss и возвращать его нормальным...
Так не может быть, какой-то файл это делает. Может код... Его надо найти.
Костыль тоже можно вставить, вот накидал:
я нашел траблу.
оказывается, в одном из недавно редактируемых файлов (которые инклудились в functions.php) были вставлены два пустых пробела между php-блоками.
в общем, сейчас всё хорошо, всё работает, всем спасибо
*(8-)
Здравствуйте, Kama!
Подскажите пожалуйста, недавно заметил в WebМастере, что робот нашел следующие ссылки:
т.е. теперь к каждому url'у генерируются с feed на конце.
Можно это как-то отключить в WordPress, оставив только сайт/feed?
В robot.txt закрыл */feed
Вот накидал код, проверил - все ссылки фидов перестанут работать, будут возвращать 404 ошибку, кроме фида на главной странице:
С учетом новой тенденции Турбо-страниц, столкнулся с проблемой. Как добавить страницы(именно страницы, а не записи) в rss.
Так же на сайте есть контентные произвольные поля и с их выводом в rss тоже сложность.
Заранее спасибо, шерстил интернет, но по первой проблеме, решения так и не нашел