@ligisayan

Как заменить конструкцию query_posts на get_posts?

Всем привет! На сайте **wordpress** есть конструкция с `query_posts`

query_posts(
                   array( 'post_type' => APP_POST_TYPE, 
                             'meta_query' => array( 
                                                          array( 'key' => 'cp_category', 
                                                                    'value' => 'Не определено', 
                                                                    'compare' => '='
                                                                   )
                                                               ), '
                            ignore_sticky_posts' => 1
                          )
                       );
    get_template_part( 'loop', 'ad_listing' ); 
    wp_reset_query();


На первой странице все выводится хорошо, но дальше уже из-за особенностей query_posts пагинация уже не работает. Пытаюсь переписать с заменой на get_posts вот так, но выводится в мета-данных какая-то полупустая чушь.

$categories = 
    get_posts(
                   array( 'post_type' => APP_POST_TYPE, 
                             'meta_query' => array( 
                                                          array( 'key' => 'cp_category', 
                                                                    'value' => 'Не определено', 
                                                                    'compare' => '='
                                                                   )
                                                               ), '
                            ignore_sticky_posts' => 1
                          )
                       );
    foreach( $categories as $category ) {
    get_template_part( 'loop', 'ad_listing' ); 
    }
    wp_reset_postdata();
?>

Как исправить и решить проблему с пагинацией?
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
@ligisayan Автор вопроса
Пагинация заработает при выполнении такого условия:
For getting the current pagination number on a static front page (Page template) you have to use the 'page' query variable: Ссылка на источник

if ( is_front_page() ) {
        $paged = (get_query_var('page')) ? get_query_var('page') : 1;   
    } else {
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Во-первых, форматируйте код адекватно, эти длинные строки читать - адски неудобно (особенно отлавливать ваши двойные $$, лишние скобки и тд):

// Параметры удобнее задавать отдельно
$args = array(
    'post_type' => APP_POST_TYPE,
    'ignore_sticky_posts' => true,
    'meta_query' => array( 
        array(
            'key' => 'cp_category', 
            'value' => 'Не определено', 
            'compare' => '=',
        ),
    ), 
);
// Получаем массив постов.
$categories = get_posts( $args );

// Перебираем массив, обязательно as $post, чтобы корректно работала функция setup_postdata()
foreach( $categories as $post ) {
    // Устанавливаем текущую запись в глобальный scope
    setup_postdata( $post );
    // Подключаем шаблон, который уже сможет видеть корректные данные из глобального scope
    get_template_part( 'loop', 'ad_listing' ); 
}
// Очищаем глобальный scope
wp_reset_postdata();

Не тестил, но должно работать.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы