Пагинация WooCommerce + Ajax WP_Query

У меня есть собственный виджет Wordpress, который позволяет пользователю фильтровать продукты с помощью атрибутов (настраиваемые таксономии).

Все это происходит через вызов Ajax, но у меня возникают проблемы с обновлением разбивки на страницы на основе отфильтрованных результатов.

Например:

Если на странице загружено 30 товаров, 10 на страницу = 3 страницы результатов.

Затем пользователь фильтрует по атрибуту, который уменьшает эти 30 продуктов до 20. Мне нужно, чтобы разбивка на страницы изменилась до 2 страниц результатов.

Вот образец WP_Query, который заменяет содержимое страницы по умолчанию. Вы можете увидеть woocommerce_pagination(), который, похоже, не работает в этой среде.

// Args
$args = array(
    'post_type' => 'product',
    'posts_per_page' => 10,
    'orderby' => 'name',
    'order' => 'ASC',
    'tax_query' => $tax_query
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) :
    woocommerce_product_loop_start();
    while( $query->have_posts() ): $query->the_post();
        wc_get_template_part( 'content', 'product' );
    endwhile;
    woocommerce_product_loop_end();

    // TODO - get pagination working
    woocommerce_pagination();

    wp_reset_postdata();
else :
    echo '<p>No products found</p>';
endif;
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 577
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пагинация WooCommerce работает на основе глобальной переменной $wp_query. Но вы используете свою собственную переменную $query. Поэтому очевидно, почему он не работает.

У вас есть 2 пути:

  1. Сначала используется класс query_posts вместо класса WP_QUERY.
  2. Второй способ - это небольшой взлом, в котором вы можете обмануть аргумент нумерации страниц $wp_query.

Вот:

 global $wp_query;
  $wp_query->max_num_pages=$query->max_num_pages;
  // TODO - get pagination working
  woocommerce_pagination();

Спасибо за помощь! Я попробовал чит-код $wp_query, который помог мне добиться успеха. Что происходит сейчас, так это то, что URL-адрес кнопок разбиения на страницы установлен на /wp-admin/admin-ajax.php?paged=2 Атрибут формы action установлен на <?= site_url() ?>/wp-admin/admin-ajax.php

gurtfrobe 20.06.2018 03:33

Я смог решить проблему с URL-адресом разбиения на страницы с помощью шага 2 эта почта. Хотя, как всегда, возникло новое препятствие ... мои фильтры стираются при перезагрузке страницы при нажатии на пагинацию. Это задача на другой день. Я приму ответ Эльвин Хачи!

gurtfrobe 20.06.2018 04:45

Другие вопросы по теме