WordPress: пользовательский WP_Query, возвращающий сообщения на первой странице для всех «выгружаемых» значений параметров

#php #ajax #wordpress

#php #ajax #wordpress

Вопрос:

Я пытаюсь создать кнопку «загрузить больше сообщений» для моей страницы блога WordPress, используя AJAX. Функция Javascript, которая заботится о передаче параметров ‘paged’, ‘offset’ и ‘posts_per_page’, делает это успешно (я проверял сто раз!).

Параметры offset и posts_per_page работают нормально (я неоднократно менял их значения, чтобы проверить это), но WP_Query всегда возвращает записи на главной странице, даже если значение $page меняется каждый раз, когда загружается больше записей.

Просто если значение $paged где-то перепуталось, я использовал статические числа для параметра ‘paged’, но он по-прежнему показывает только сообщения на первой странице, независимо от значения.

Все выполняется нормально, и я не получаю сообщения об ошибке при включенной отладке. Сообщения загружаются — просто не те, которые нужно.

Другая информация: моя собственная тема, плагины сейчас не запущены.

Приведенный ниже код взят из функции в моем functions.php досье.

     $args = array(
        'suppress_filters' => true,
        'post_type' => 'post',
        'orderby'    =>  'date',
        'order'      =>  'desc',
        'posts_per_page' => $ppp,
        'paged'    => $page,
        'offset'  => $offset, //I've tried simply putting 3, 5 etc
    );

    $loop = new WP_Query($args);

    if ($loop -> have_posts()) : 
        while ($loop -> have_posts()) : $loop -> the_post();
            the_title();
        endwhile;
    endif;
    wp_reset_postdata();
 

Я ввел только то, что, по моему мнению, является релевантным кодом, чтобы его было легче читать. Дайте мне знать, если вы хотите, чтобы я что-то добавил. И спасибо!

РЕДАКТИРОВАТЬ: использование функции query() напрямую заставляет ее работать, но я действительно не хочу связываться с основным объектом запроса…и это просто означает, что все остальное в моем коде в порядке. WP_Query просто странный.

Ответ №1:

Вы не можете использовать offset и paged вместе — вы бы использовали только одно или другое. Их совместное использование нарушает разбивку на страницы. Если вы хотите, чтобы сообщения отображались на странице 2 (при условии, что у вас 10 на страницу), используйте либо:

 'paged' => 2
 

или

 'offset' => 10
 

Комментарии:

1. Ах, вы правы! Я думал, что смещение было применено к начальным сообщениям, а затем цикл начал разбивать на страницы остальные сообщения оттуда. Я полагаю, неправильное понимание того, как работает WP_Query. Я не знаю, почему я предположил, что простое использование ‘offset’ будет семантически неверным, хотя технически правильным. В любом случае, большое вам спасибо!