2016-01-18 2 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» все еще находится в базе данных.

Кто-нибудь знает об обходном пути для этого? Я считаю, что это ошибка, но их поддержка в настоящее время закрыта.

Спасибо.

EDIT

То, что я думаю, что мне нужно, это способ проверить только _sale_price, если продукт находится в «простых» или «внешних» терминах, то сделать то же для _min_variation_sale_price.

Я создал проблему на их github. https://github.com/woothemes/woocommerce/issues/10096

EDIT

Выпуск фиксируется с помощью @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

Смежные вопросы