在页面加载之前按价格对Woo Commerce查询进行过滤

时间:2018-12-18 13:57:09

标签: woocommerce

我在Woo Commerce商店中有一个名为“ j-pods”的产品类别。

目标是使页面以“便宜的j豆荚”为中心。

所以我用created的“ cheap-j-pods”创建了一个新产品类别。

在加载“便宜”变体页面时,我想更改查询以使其从原始的“ j-pods”类别中拉出所有产品,并从最低价格到最高价格进行过滤。

据我了解,“ woocommerce_product_query”操作是在执行主查询之前对其进行修补的方法。

更新:我找到了一种很好的方法来更改要拉的产品类别,但是查询的按价格排列部分无效。

这是我的代码...

add_action( 'woocommerce_product_query', function( $q ) {
   $pageCat = $q->get( 'product_cat' );

   if( empty($pageCat) || $pageCat !== 'cheap-j-pods') { 
       return;
   }

   // Change product category query
   $q->set( 'product_cat', 'j-pods' );

   // Extract existing meta query
   $meta_query = $q->get( 'meta_query' );

   // Add a query to arrange products by asc price
   $meta_query[] = array(   
       'orderby' => 'meta_value_num',
       'meta_key' => '_price',
       'order' => 'asc'
   ); 

   //echo '<pre style="display:block">' . print_r($meta_query, true) . '</pre>';

   $q->set( 'meta_query', $meta_query );

}, 900);

现在,产品将以默认顺序显示。

为什么按价格排序的产品在查询中不起作用?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我想出了一种非常整齐的方法来完成这项工作。

我的错误是将上升的价格参数应用于“元查询”数组,而期望值在数组的根部分。

下面的工作代码。

add_action( 'woocommerce_product_query', function( $q ) {
    $pageCat = $q->get( 'product_cat' );

    // Only fire on specific category page
    if( empty($pageCat) || $pageCat !== 'cheap-j-pods') { 
        return;
    }

    // Change product category query
    $q->set( 'product_cat', 'j-pods' );

    // Change products to be ordered by price (lowest - highest)
    $q->set( 'orderby', 'meta_value_num');
    $q->set( 'meta_key', '_price');
    $q->set( 'order', 'asc');


}, 900);