InsaneRay
@InsaneRay

Wordpress. Можно ли сделать последовательный вывод новостей при пагинации из двух циклов?

Сейчас у меня есть 2 цикла на странице, соритровка идет по мета полю. Первый выводит даты от сегодняшнего и до декабря, а 2-ой - от января и до вчерашней даты , чтобы создался эффект зацикленности. Всё работает хорошо, не учитывая момент, когда дело доходит до пагинации. При указании допустим вывода 5 постов - выводятся 5 из 1-го цикла, и 5 из 2-го. Вероятно в wordpress так и было изначально задумано, но можно ли сделать так, чтобы в пагинации сначала шли посты 1-го цилка, а затем 2-го?
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
InsaneRay
@InsaneRay Автор вопроса
В итоге решил сделать вывод один циклом с модификацией запроса через add_filter

$args = array(
	'post_type'      => 'chronicles', 
	'posts_per_page' => 13,
	'order'          => 'ASC',
	'orderby'        => 'meta_value',
	'meta_key'       => 'chronicles_event_date'
);

$args['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$args['meta_query'] = array(
    'relation' => 'OR',
    array(
        array(
            'key'       => 'chronicles_month',
        ),     
        array(
            'key'       => 'chronicles_day',
        )   
    ),    
);

add_filter( 'posts_orderby', $func = function ( $orderby, $loop ) {
    $start_m = date('m');
    $start_d = date('d');
    global $wpdb;
    $orderby = $wpdb->prepare(
        "
        CASE WHEN (mt1.meta_value >= %s AND mt2.meta_value >= %s) THEN mt1.meta_value ELSE (12+mt1.meta_value) END ASC, mt2.meta_value ASC
        "
        , $start_m, $start_d
    );
    return $orderby;
}, 10, 2 );

$loop = new WP_Query( $args );

remove_filter( 'posts_orderby', $func, 10, 2 );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы