Я пытаюсь отобразить список отфильтрованных продуктов в отдельном виде.Я расширил файл archive-product.php
и заменил функцию woocommerce_product_loop()
на функцию woobadge_query_filtered_products()
, которая генерирует / устанавливает глобальные query_posts
с некоторыми настраиваемыми параметрами.Затем я просто использую функции have_post()
и the_post()
для вывода продуктов.Я могу правильно отобразить отфильтрованные продукты, и я вручную попытался использовать параметры page
в URL и увидел, что подкачка работает нормально. Но проблема в том, что pagination
отсутствует в представлении.
Код шаблона ниже:
<?php
/**
* The Template for displaying product badge archives.
* This template can be overridden by copying it to yourtheme/woocommerce/woobadge-archive-product.php
*/
defined( 'ABSPATH' ) || exit;
get_header( 'shop' );
/**
* Hook: woocommerce_before_main_content.
*
* @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
* @hooked woocommerce_breadcrumb - 20
* @hooked WC_Structured_Data::generate_website_data() - 30
*/
do_action( 'woocommerce_before_main_content' );
// Show filter if enabled
if (vp_option('woo_badge_man_opt.pba_show_filters')) {
echo do_shortcode('[woo_pro_badges_filter_archive_extended]');
}
?>
<header class="woocommerce-products-header">
<?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
<h1 class="woocommerce-products-header__title page-title">Products Archive By `<?php the_title(); ?>`</h1>
<?php endif; ?>
<?php the_content(); ?>
</header>
<?php
// Initiate filtered products query
if ( woobadge_query_filtered_products() ) {
/**
* Hook: woocommerce_before_shop_loop.
*
* @hooked wc_print_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
while ( have_posts() ) {
the_post();
/**
* Hook: woocommerce_shop_loop.
*
* @hooked WC_Structured_Data::generate_product_data() - 10
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
woocommerce_product_loop_end();
/**
* Hook: woocommerce_after_shop_loop.
*
* @hooked woocommerce_pagination - 10
*/
do_action( 'woocommerce_after_shop_loop' );
} else {
/**
* Hook: woocommerce_no_products_found.
*
* @hooked wc_no_products_found - 10
*/
do_action( 'woocommerce_no_products_found' );
}
/**
* Hook: woocommerce_after_main_content.
*
* @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
*/
do_action( 'woocommerce_after_main_content' );
/**
* Hook: woocommerce_sidebar.
*
* @hooked woocommerce_get_sidebar - 10
*/
do_action( 'woocommerce_sidebar' );
get_footer( 'shop' );
?>
Похоже, нумерация woocommerce зависит от woocommerce_product_loop
и wc_get_loop_prop
.Как я могу заставить представление разбивки на страницы использовать глобальный запрос?
Примечание: Я могу заверить, что сгенерированная функция query_posts
by woobadge_query_filtered_products
правильно использует параметры подкачки.