Поменять сортировку записей в RSS-ленте wordpress?
По умолчанию в главном feed (site.com/feed/) выводятся только последние опубликованные новые записи. Хочу поменять сортировку записей в rss, чтобы выводились последние измененные записи. Попробовал такой код добавить в functions.php, но в главном feed по-прежнему выводятся только новые записи.
/* Модификация RSS */ function add_new_post_types_to_feed( $query ) { // Выходим если это запрос не фидов if( ! $query->is_feed || ! $query->is_main_query() ) return; $query->set( 'orderby', 'modified' ); } add_filter('pre_get_posts', 'add_new_post_types_to_feed'); /* Модификация RSS */ |
/* Модификация RSS */ function add_new_post_types_to_feed( $query ) { // Выходим если это запрос не фидов if( ! $query->is_feed || ! $query->is_main_query() ) return; $query->set( 'orderby', 'modified' ); } add_filter('pre_get_posts', 'add_new_post_types_to_feed'); /* Модификация RSS */
Дополнительно
// Выходим если это запрос не фидов
Не нужно выходить, если это запрос фидов
if ( $query->is_feed ) { $query->set( 'orderby', 'modified' ); } |
if ( $query->is_feed ) { $query->set( 'orderby', 'modified' ); }
Если хотите, продублируйте в ответы, выберу вас автором.
Ответы:
function add_new_post_types_to_feed( $query ) { if ( $query->is_feed ) { $query->set( 'orderby', 'modified' ); } } add_filter( 'pre_get_posts', 'add_new_post_types_to_feed' ); |
function add_new_post_types_to_feed( $query ) { if ( $query->is_feed ) { $query->set( 'orderby', 'modified' ); } } add_filter( 'pre_get_posts', 'add_new_post_types_to_feed' );
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для сортировки главной RSS-ленты по дате изменения нужно менять основной feed-запрос до выполнения SQL. Правильная точка входа - pre_get_posts. Внутри обработчика важно проверять именно объект WP_Query, который пришел в функцию, а не менять все запросы подряд. Иначе можно случайно затронуть архивы, виджеты, админку или дополнительные выборки на странице.
Рабочий вариант для главной ленты site.com/feed/:
add_action('pre_get_posts', 'wturm_order_main_feed_by_modified'); function wturm_order_main_feed_by_modified($query) { if (is_admin() || ! $query->is_main_query() || ! $query->is_feed()) { return; } if (! $query->is_home()) { return; } $query->set('orderby', 'modified'); $query->set('order', 'DESC'); }
Этот код оставляет обычные страницы сайта без изменений и срабатывает только для основной RSS-ленты. Если нужно сортировать по дате изменения все RSS-ленты, включая рубрики, метки и авторов, уберите проверку is_home. Если нужна только главная лента, проверку лучше оставить, потому что category/feed/ и tag/feed/ часто используются отдельно и пользователи ожидают там обычный порядок публикаций.
После правки откройте /feed/ и сравните порядок элементов по исходному XML. Не ориентируйтесь только на визуальный просмотр в браузере: браузер может кешировать XML или отображать его не так, как его видит RSS-агрегатор. Также проверьте кеширующие плагины, серверный кеш и CDN, если они есть. Иногда код уже работает, но отдается старая версия ленты из кеша.
Отдельный нюанс: сортировка по modified не обязательно меняет текст даты внутри элемента RSS. В ленте может отображаться дата публикации записи, хотя порядок уже построен по post_modified. Это нормально, если задача только в порядке элементов. Если нужно, чтобы агрегаторы видели измененную дату как дату обновления, это решается отдельными фильтрами вывода RSS, но для обычной смены сортировки они не нужны.