Как получить дату последнего обновления поста из RSS-ленты WP?

Вопрос или проблема

У меня есть сторонний инструмент, который извлекает контент из фида нашего сайта на WordPress через наш RSS фид: http://ontariotravelblog.com/feed

Фид предоставляет мне все необходимое, кроме даты последнего обновления записи блога; он включает дату публикации, однако это просто дата, когда блог был впервые опубликован; редактирования / изменения, внесенные в блог после публикации, не влияют на эту дату.

Теперь интересно, что версия фида ATOM (http://ontariotravelblog.com/feed/atom) действительно включает как дату публикации, так и дату обновления, например:

 <entry>
  ...
    <title type="html">
        <![CDATA[8 песен для вашего плейлиста дорожной поездки по Онтарио]]>
    </title>
    <id>http://ontariotravelblog.com/?p=5621</id>
    <updated>2016-06-09T16:40:46Z</updated>
    <published>2016-05-10T16:25:35Z</published>
 ...
 </entry>

Что замечательно, за исключением того, что фид ATOM не содержит некоторых критически важных элементов (в частности, в нем отсутствует ряд элементов “media:”, таких как media:thumbnail и т.д.)

Итак, после всего этого, мой вопрос: есть ли способ получить поле updated, которое включено в запись фида ATOM, чтобы оно появилось в основном RSS фиде? (возможно, через какую-то опцию конфигурации?)

Atom против RSS2

Давайте взглянем на файлы wp-includes/feed-atom.php и wp-includes/feed-rss2.php.

Элемент updated записи фида Atom это:

<updated><?php 
    echo mysql2date(
        'Y-m-d\TH:i:s\Z', 
        get_lastpostmodified('GMT'), 
        false 
    ); 
?></updated>

Элемент pubDate элемента фида RSS2 это:

<pubDate><?php 
    echo mysql2date(
        'D, d M Y H:i:s +0000', 
        get_post_time('Y-m-d H:i:s', true), 
        false
    ); 
?></pubDate>

Элемент lastBuildDate канала RSS2 это:

<lastBuildDate><?php 
    echo mysql2date(
        'D, d M Y H:i:s +0000', 
        get_lastpostmodified('GMT'), 
        false
    ); 
?></lastBuildDate>

Пространство имен

Фид RSS2 уже содержит пространство имен Atom:

xmlns:atom="http://www.w3.org/2005/Atom"

Поэтому я думаю, что мы можем использовать элемент <atom:updated> для нашего пользовательского элемента updated. Возможно, вам стоит изучить это более подробно, если это соответствует стандарту или если есть другие возможные пространства имен, подходящие для этого.

В последнем случае мы можем использовать действие rss2_ns, чтобы добавить соответствующее пространство имен.

Внедрение пользовательского элемента

Мы можем использовать действие rss2_item, чтобы внедрить пользовательские элементы, например:

add_action( 'rss2_item', function()
{   
    printf( 
        '<atom:updated>%s</atom:updated>',
         get_post_modified_time( 'D, d M Y H:i:s +0000', true )
    );

} );

Надеюсь, вы сможете адаптировать это под свои нужды.

это отличная идея для обратной ссылки

Ответ или решение

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

1. Понимание структуры RSS и ATOM

Как вы заметили, в формате ATOM содержится элемент <updated>, который показывает дату последнего обновления. В то время как стандартная RSS-лента предоставляет только дату публикации через элемент <pubDate>.

Помимо этого, ATOM использует пространство имен, которое может быть использовано и в RSS-ленте, так как ваша RSS-лента уже содержит этот атрибут:

xmlns:atom="http://www.w3.org/2005/Atom"

2. Добавление элемента <atom:updated> в RSS-ленту

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

// Добавление элемента <atom:updated> в RSS-ленту
add_action('rss2_item', function() {
    // Получаем дату последнего изменения в нужном формате
    $last_modified = get_post_modified_time('D, d M Y H:i:s +0000', true);

    // Выводим элемент <atom:updated>
    printf('<atom:updated>%s</atom:updated>', esc_html($last_modified));
});

3. Понимание кода

  • Хук rss2_item – это действие, которое позволяет вам добавлять содержимое в каждый элемент RSS.
  • Функция get_post_modified_time() – используется для получения даты последнего изменения поста. Первый параметр задает формат даты, второй параметр указывает, что время нужно получить в GMT.
  • Функция esc_html() – обеспечивает безопасное отображение даты в XML, защищая от потенциальных уязвимостей.

4. Проверка изменений

После внесения этих изменений в файл functions.php, вы можете проверить вашу RSS-ленту, перейдя по адресу: http://ontariotravelblog.com/feed. В каждой записи вы должны увидеть новый элемент <atom:updated>, который будет содержать дату последнего изменения поста.

Заключение

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

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

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

Капча загружается...