Skip to content

Instantly share code, notes, and snippets.

@campusboy87
Last active May 4, 2018 06:24
Show Gist options
  • Save campusboy87/ec71ff72d42d509b2b497f5d4d234a7c to your computer and use it in GitHub Desktop.
Save campusboy87/ec71ff72d42d509b2b497f5d4d234a7c to your computer and use it in GitHub Desktop.
Изменяет порядок вывода постов в ленте RSS (feed) через равные указанные промежутки времени
<?php
/**
* Изменяет порядок вывода постов в ленте через равные промежутки времени
*
* @param WP_Query $query
*/
function change_rrs_posts_date( $query ) {
// Период обновления постов в ленте - 1 день
$period = 24 * HOUR_IN_SECONDS;
// Название временной опции
$name_transient = 'feed_id_posts';
// Вносим изменения только в обычную RSS ленту
if ( isset( $query->query['feed'] ) && $query->query['feed'] == 'feed' && $query->is_main_query() ) {
// Получаем ID постов
$id_posts = get_transient( $name_transient );
if ( $id_posts ) {
// Если ID постов есть - указываем вывести их
$query->set( 'post__in', $id_posts );
$query->set( 'orderby', 'post__in' );
} else {
// Если ID постов нет - пытаемся получить их
// Получаем посты рандомно в количестве, указанным в админке для RSS ленты
$posts = get_posts( [
'numberposts' => get_option( 'posts_per_rss' ),
'orderby' => 'rand',
] );
// Если посты нашлись
if ( $posts ) {
// сохраняем во временную опцию их ID
$id_posts = wp_list_pluck( $posts, 'ID' );
set_transient( $name_transient, $id_posts, $period );
// Указываем вывести их
$query->set( 'post__in', $id_posts );
$query->set( 'orderby', 'post__in' );
}
}
}
}
add_action( 'pre_get_posts', 'change_rrs_posts_date' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment