WooCommerce前后商店循环不起作用

时间:2017-08-20 作者:user126188

我已经创建了一个短代码,在一个新页面中显示所有woocommerce产品,其中包含所有woocommerce过滤器和分页,但似乎只显示产品

ob_start();

        $products = new WP_Query( apply_filters( \'woocommerce_shortcode_products_query\', $args, $atts ) );

        if ( $products->have_posts() ) : ?>

            <?php do_action( \'woocommerce_before_shop_loop\' ); //this would show post count and filter ?>
            <?php woocommerce_product_loop_start(); ?>

                <?php while ( $products->have_posts() ) : $products->the_post(); ?>

                    <?php wc_get_template_part( \'content\', \'product\' ); ?>

                <?php endwhile; // end of the loop. ?>

            <?php woocommerce_product_loop_end(); ?>
            <?php do_action( \'woocommerce_after_shop_loop\' ); //this would show pagination ?>

        <?php endif;?>

        <?php
            wp_reset_postdata();
        ?>
        <?php
        return \'<div class="woocommerce columns-\' . $column . \'">\' . ob_get_clean() . \'</div>\';
根据woocommerce存档产品。php模板woocommerce_before_shop_loop 应显示计数和筛选器

woocommerce_after_shop_loop 显示分页,但此处不起作用。有没有其他方法可以展示给他们看?

wc visual composer的完整短代码:https://pastebin.com/crv4jwsz

1 个回复
SO网友:Jacob Peattie

在核心WooCommerce中,分页是通过woocommerce_pagination() 连接到的函数woocommerce_after_shop_loop, 排序和结果计数由woocommerce_result_count()woocommerce_catalog_ordering() 功能。如果查看这些函数的源代码,可以看到它们按照主菜单显示$wp_query, 它将不包含任何产品,因为您正在使用自己的WP\\U查询查询帖子。

因此,这可能是非常罕见的情况之一query_posts() 这是正确的做法。如果您使用query_posts() 代替辅助WP\\U查询,这些模板函数应该反映您的自定义查询。

ob_start();

query_posts( apply_filters( \'woocommerce_shortcode_products_query\', $args, $atts ) );

if ( have_posts() ) : ?>

    <?php do_action( \'woocommerce_before_shop_loop\' ); //this would show post count and filter ?>
    <?php woocommerce_product_loop_start(); ?>

        <?php while ( have_posts() ) : the_post(); ?>

            <?php wc_get_template_part( \'content\', \'product\' ); ?>

        <?php endwhile; // end of the loop. ?>

    <?php woocommerce_product_loop_end(); ?>
    <?php do_action( \'woocommerce_after_shop_loop\' ); //this would show pagination ?>

<?php endif;?>

<?php 
wp_reset_postdata(); 
wp_reset_query(); 

return \'<div class="woocommerce columns-\' . $column . \'">\' . ob_get_clean() . \'</div>\';
注意wp_reset_query(), 这在这里非常重要。

但我不确定分页是否能正常工作,您可能需要使用自己的实例paginate_links(), 提到the documentation 在法典中使用paginate_links() 使用自定义查询。

结束

相关推荐