Вопрос или проблема
В стандартном 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
, вам необходимо использовать несколько других подходов.
Вот как вы можете это сделать:
-
Откройте файл functions.php вашей темы или создайте новый плагин для внесения изменений.
-
Добавьте следующий код, который модифицирует формат даты в 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);
}
- Для того чтобы элемент
<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 и гарантировать, что он будет валидным и будет соответствовать вашим требованиям.