【问题标题】:Filtering The Woo Commerce Query Before Page Loads To Sort By Price在页面加载之前过滤 Woocommerce Jquery 以按价格排序
【发布时间】:2018-12-19 20:04:13
【问题描述】:

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

我们的目标是制作一个以“便宜的 j pods”为中心的页面。

所以我创建了一个新的产品类别,其中包含 slug '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);

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

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

非常感谢。

【问题讨论】:

    标签: woocommerce


    【解决方案1】:

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

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

    下面的工作代码。

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多