Измените формат pubDate в RSS-канале.

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

В стандартном RSS-канале WordPress элемент <pubDate> выглядит так:

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

и показывает результат <pubDate>Вт, 12 Май 2020 12:39:03 +0000</pubDate>

как я могу изменить эту строку, чтобы получить результат <pubDate>12/05/2020 12:39:03 +0000</pubDate> (d/m/Y) или <pubDate>12-05-2020 12:39:03 +0000</pubDate> (d-m-Y), но чтобы это было корректно по стандарту RFC-822?

Я попробовал множество вариантов, таких как <pubDate><?php echo mysql2date('r', get_the_time('Y-m-d H:i:s')); ?></pubDate> или <pubDate><?php echo get_post_time( 'd/m/Y H:i:s O', true ); ?></pubDate>, но они не проходят валидацию.

Буду признателен за любые идеи.

Вы, вероятно, можете сделать это, настроив канал:

https://codex.wordpress.org/Customizing_Feeds

Таким образом, вы можете создать свой собственный шаблон для канала и изменить pubDate под свои нужды.

Где вы валидаете свой канал, и какая ошибка возникает?

Скорее всего, вам просто нужно обернуть время в CDATA. Посмотрев на существующий канал от WordPress, вы можете увидеть пример:

Попробуйте заменить ваш pubDate на версию с CDATA и посмотрите, пройдет ли валидацию!

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

Для изменения формата элемента <pubDate> в RSS-ленте WordPress и достижения нужного результата, который соответствует стандартам RFC-822, мы можем создать специальный шаблон для ленты.

По умолчанию элемент <pubDate> формируется с использованием функции mysql2date и возвращает дату в формате D, d M Y H:i:s +0000. Чтобы изменить этот формат на d/m/Y H:i:s +0000 или d-m-Y H:i:s +0000, вам необходимо использовать несколько других подходов.

Вот как вы можете это сделать:

  1. Откройте файл functions.php вашей темы или создайте новый плагин для внесения изменений.

  2. Добавьте следующий код, который модифицирует формат даты в RSS:

add_filter('the_date', 'custom_pub_date_format');
add_filter('the_time', 'custom_pub_date_format');

function custom_pub_date_format($date) {
    // Здесь мы устанавливаем желаемый формат даты
    $date_format = 'd/m/Y H:i:s +0000'; // Измените на 'd-m-Y H:i:s +0000' при необходимости

    // Возвращаем дату с нужным форматом
    return mysql2date($date_format, get_the_time('Y-m-d H:i:s', true), false);
}
  1. Для того чтобы элемент <pubDate> корректно обрабатывался в соответствии с RFC-822, рекомендуется обернуть вывод даты в CDATA. То есть, в вашем шаблоне RSS-ленты используйте следующий код:
<pubDate><![CDATA[<?php echo custom_pub_date_format(get_the_time('Y-m-d H:i:s')); ?>]]></pubDate>

Таким образом, полное содержание вашего элемента <pubDate> будет выглядеть следующим образом:

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

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

Таким образом, вы сможете изменить формат даты в RSS-ленте WordPress и гарантировать, что он будет валидным и будет соответствовать вашим требованиям.

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

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