自定义循环后WooCommerce分页和结果计数

时间:2018-05-18 作者:Bartosz Was

运行自定义查询后,我正在尝试正确显示分页和结果计数。

现在查询结果显示正确,但在我看来,结果计数和分页显示了车间中所有产品。

在深入研究这个问题之后,我发现我创建了单独的查询对象,而不是替换主查询。我试图按照此处的指南解决此问题:How to fix pagination for custom loops?

..但这是一种wordpress方式,我需要改变这一点:

global $loop ;

  $args = array(
            \'post_type\' => \'product\',
            \'posts_per_page\' =>$per_page,
            \'meta_query\' => array(
                array(
                \'key\' => \'_product_brand\',
                \'value\' => $val,              
                    )

            )     
      );  


    $loop = new WP_Query( $args );

         // pagination fix
    $temp_query = $wp_query;
    $wp_query = NULL;
    $wp_query = $loop;
    
    if ( $loop->have_posts() ) {
        while ( $loop->have_posts() ) : $loop->the_post();
            wc_get_template_part( \'content\', \'product\' );  
        endwhile;
    } else {
        echo __( \'No products found\' );
    }
    
    wp_reset_postdata();
    
    $wp_query = NULL;
    $wp_query = $temp_query;
    
   
。。进入woocommerce功能。到目前为止,我已经尝试更改全局变量$loop 对于$woocommerce_loop 但这会产生错误。

我还尝试传递$paged属性,如:

$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;

 $args = array(
            \'post_type\' => \'product\',
            \'posts_per_page\' =>$per_page,
            \'paged\' => $paged,
            \'meta_query\' => array(
                array(
                \'key\' => \'_product_brand\',
                \'value\' => $val,              
                    )

            )     
      );  
还有:

$args[\'paged\'] = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
这两种方法都失败了,它们正确地显示了产品,但没有分页,也没有结果计数。

这里有什么问题?我非常感谢您的帮助,谢谢。

#EDIT 1遵循CFX指南后:https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

分页和结果计数最终开始工作。我这里的问题是使用WP\\u Query而不是wc\\u get\\u产品。

遵循wc\\u get\\u products功能的woocommerce文档:https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query

我使用自定义密钥实现了产品的正确显示。但并非所有文档中的论点都对我有效。例如,我不能显示类别中的产品,也不能显示给定价格的产品。

 $all_products   = wc_get_products(array(
                \'category\'             => array( \'suspension\' ),
                \'price\'     => 59.99,
                \'regular_price\' => 59,
                \'sale_price\'    =>159,               
            ));
我试着一个接一个地传递这些参数,所有这些都是根据文档进行的,所以它应该可以工作,但事实并非如此。它产生了以下错误:

警告:array\\u map():参数#2应该是E:\\xampp\\apps\\wordpress\\htdocs\\wp content\\plugins\\woocommerce\\includes\\data stores\\class wc product data store cpt中的数组。php在线1673

警告:array\\u filter()要求参数1为array,在E:\\xampp\\apps\\wordpress\\htdocs\\wp content\\plugins\\woocommerce\\includes\\data stores\\class wc product data store cpt中提供空值。php在线1673

#EDIT2

参数:

$all_products   = wc_get_products(array(
                \'product_category\'  => \'suspension\',
            ));
处理程序:

if ( ! empty( $query_vars[\'product_category\']) ) {
        $query[\'tax_query\'][] = array(
            \'taxonomy\'      => \'product_cat\',
            \'terms\'         => esc_attr( $query_vars[\'product_category\'] ),
        );
        return $query;
    }
我想用给定的slug显示父类别中的产品。只有当我传递类别id时,此代码才起作用。如果我传递slug作为参数(如上面的代码),循环将显示商店中的所有产品。

1 个回复
最合适的回答,由SO网友:cfx 整理而成

您的一些查询语法使事情变得相当复杂,WooCommerce实际上不鼓励使用WP_Query() 检索产品。他们甚至声称,最终可能会导致道路瘫痪。

我最近写了一篇关于如何做你想做的事情的文章,并在这里附上了一个例子:https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post