WordPress 4: настройка RSS-ленты

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

Посты целиком

Посты целиком — почему это плохо?

Во-первых, кому-то может не понравится, что вы устраиваете у них в RSS-читалках бардак. Согласитесь, что чаще всего в RSS-лентах именно анонсы статей и новостей. А, уже кому надо, тот переходит по ссылкам и читает публикации полностью.

Я, конечно, могу предположить, что кто-то пишет в блоге такие короткие посты, что они вполне сойдут за анонсы. Ну что ж, это уже дело хозяйское. В этом случае, пожалуй, можно выводить и посты целиком.

Во-вторых, выводя посты целиком вы не даёте читателям повода перейти на ваш сайт. Зачем им это? Они и так всё видят и всё читают.

Готовые RSS-плагины

Для WordPress много плагинов. Конечно же есть и такие, которые позволяют изменить вид RSS-ленты. К сожалению, для четвертой версии движка плагинов мало и часть из них очень старые.

Некоторые блогеры призывают пользоваться плагинами для RSS-лент, которые были написаны ещё  года 3-4 назад. Да, они работают с WordPress 4.0, хотя бывает, что с некоторыми оговорками. Короче, мне это не понравилось. Если нет нормального «свежего» плагина, то придётся пойти другим путём.

Свой RSS-Плагин

Когда я разбирался с возможностью изменения вида RSS-ленты, то нашел в интернете некоторое количество заготовок кода, которые позволяли достичь того или иного результата. Всё это предполагалось помещать в файл functions.php, который находится в каталоге темы.

Ок, можно и так. Однако, создать плагин с тем же кодом — это минутное дело, и это, на мой взгляд, правильнее.

Итак, мой вариант кода:

// Управляем выводом в RSS - Анонс.
function d1mon_feed_description($description) {
  global $more;
  $more1 = $more;
  $more = 0;
  $description = the_content_rss('', 0, '', 0, 2);
  $more = $more1;
  return $description;
}
add_filter('the_excerpt_rss', 'd1mon_feed_description');

// Управляем выводом в RSS - Контент.
function d1mon_feed_content($content) {
  global $post;
  $url = get_permalink($post->ID);
  $content .= '<p>Источник: <a href="'.$url.'">'.$url.'</a></p>';
  return $content;
}
add_filter('the_content_feed', 'd1mon_feed_content');

Первая функция заточена под то, чтобы выводить анонсы публикаций в RSS-ленте без всякого лишнего мусора, ссылок, тегов. Здесь ключевыми являются переменная $more и функция the_content_rss. Переменную $more временно меняем, чтобы выводить именно анонсы, а не тексты целиком. С параметрами the_content_rss при желании можете поиграться, описание есть, например, здесь.

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

По сути, мне вторая функция не нужна. Размещаю её здесь лишь для полноты информации, вдруг пригодится кому-нибудь.

В админке WordPress есть настройка, которая определяет: выводить в RSS-ленте полный текст + анонс, либо выводить просто анонс.

Настройка RSS-ленты в WordPress

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

Вот мой код в виде простейшего плагина (Плагин d1mon_feed). Нужно просто распаковывать содержимое архива в wp-content/plugins, после чего включить плагин в админке. Естественно, что никаких настроек плагин не имеет, просто редактируйте его код, если что-то нужно.

В действии плагин можно видеть здесь.

6 Комментариев

  1. Добрый день, вопрос в следующем, все ок работает, кроме одного, в rss рублик все равно выдается полный текст статьи, как это поправить, спасибо

Добавить комментарий