2016-01-18 161 views
1

关于只做售后产品展示的问题和答案很多,但无论我尝试什么,都无济于事。WooCommerce:展示店内的销售产品

我有以下查询被应用

function my_modify_main_query($query) { 
    if ($query -> query['post_type'] == 'product' && $query -> is_main_query() && is_shop()) {// Run only on the shop 
     if (isset($_GET['sale'])): 
      $query -> set('meta_query', 
       array(
        'relation' => 'OR', 
        array(// Simple products type 
         'key' => '_sale_price', 
         'value' => 0, 
         'compare' => '>', 
         'type' => 'numeric' 
        ), 
        array(// Variable products type 
         'key' => '_min_variation_sale_price', 
         'value' => 0, 
         'compare' => '>', 
         'type' => 'numeric' 
        ) 
       ) 
      ); 
     endif; 
    } 
} 
// Hook my above function to the pre_get_posts action 
add_action('pre_get_posts', 'my_modify_main_query'); 

查询本身,但问题是。 如果产品是销售价格的变量,那么产品将被更改为简单产品,但“_min_variation_sale_price”元值仍在数据库中。

有没有人知道这个解决方法?我相信这是一个错误,但他们的支持目前已关闭。

谢谢。

编辑

我想我需要的是一种方法,只检查_sale_price如果该产品是在“简单”或“外部”的条款,然后做_min_variation_sale_price相似。

我在他们的github上创建了一个问题。 https://github.com/woothemes/woocommerce/issues/10096

编辑

问题是使用@helgatheviking答案固定。 虽然,请注意,要彻底解决问题,您必须删除变体,保存,更改类型,保存,运行delete_transient('wc_products_onsale'); 只有这样才能为我工作。

回答

3

从我的教程modifying the product query

我相信这应该修改环路,只显示在售产品:

add_action('woocommerce_product_query', 'so_20990199_product_query'); 

function so_20990199_product_query($q){ 

    $product_ids_on_sale = wc_get_product_ids_on_sale(); 

    $q->set('post__in', (array) $product_ids_on_sale); 

} 
+0

不幸的是,我试过了。 – Damian

+0

下一次,请提及您*有*尝试过的所有事情,以减少重复工作。您是否暗示'wc_get_product_ids_on_sale()'没有检索出售的可变产品? – helgatheviking

+0

当您将产品保存为销售变量时,请将其更改为简单而不销售,然后返回到该数组中。 – Damian

相关问题