2015-01-15 4 views
1

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

add_action('xyz', function() { 
    global $product; 

    if (!$product->is_in_stock()) { 
     //Need to make it viewable here but selectively, not globally; 
    } 
}); 

Один флажок тумблер на странице продукта будет идеальным, например, «Show даже если уровень запасов равен нулю» ,

Примечание. Для более чем 500 продуктов мне нужен флажок для тех немногих, которые мне нужны, но не наоборот.

Любые идеи?

ответ

4

Ну, это было чертовски много сложнее, чем я думал, что это будет. Решение состоит из трех частей.

Прежде всего, вы должны добавить галочку к продукту метаболизма admin. Я думал, что было бы уместно, если бы мы разместили его рядом с входами состояния запаса.

add_action('woocommerce_product_options_stock_status', 'so_27971630_hide_if_out_of_stock'); 

function so_27971630_hide_if_out_of_stock(){ 
    woocommerce_wp_checkbox(array('id' => '_hide_if_out_of_stock', 'wrapper_class' => 'show_if_simple show_if_variable', 'label' => __('Hide this product from archives when out of stock?', 'your-plugin-domain'))); 
} 

Для этого необходимо сохранить эти данные. Обычно я бы сохранил флажок как «да» и «нет», как это делает WooCommerce. Однако, получение запроса продукта правильно, необходимо, чтобы мета существовать, когда вы хотите, чтобы скрыть элемент и не существует ... в противном случае, следовательно, если/другое update_post_meta() против delete_post_meta()

add_action('woocommerce_process_product_meta', 'so_27971630_save_product_meta'); 

function so_27971630_save_product_meta($post_id){ 
    if(isset($_POST['_hide_if_out_of_stock'])) { 
     update_post_meta($post_id, '_hide_if_out_of_stock', 'yes'); 
    } else { 
     delete_post_meta($post_id, '_hide_if_out_of_stock'); 
    } 
} 

Наконец, нам нужно настроить запрос продукта. WooCommerce создает пользовательский запрос для продуктов в своем классе WC_Query. В основном то, что я сделал, в том случае, когда вы не являетесь массовым, скрывающим все имеющиеся на складе элементы через опцию плагина, этот код будет изменять мета-запрос, чтобы был показан любой элемент, который не имеет мета-ключа _hide_if_out_of_stock. Это контр-интуитивный способ сказать, что любой продукт, в котором установлен флажок «скрыть, когда его нет на складе», будет скрыт.

add_action('woocommerce_product_query', 'so_27971630_product_query'); 

function so_27971630_product_query($q){ 

    $meta_query = $q->get('meta_query'); 

    if (get_option('woocommerce_hide_out_of_stock_items') == 'no') { 
     $meta_query[] = array(
        'key'  => '_hide_if_out_of_stock', 
        'compare' => 'NOT EXISTS' 
       ); 
    } 

    $q->set('meta_query', $meta_query); 
} 
+0

Спасибо за подробный ответ, я посмотрю на реализацию этого, как только смогу, и дам вам знать. – Sara44

+0

Я действительно протестировал этот, поэтому считаю, что он должен работать. Дай мне знать. – helgatheviking

+0

Я пробовал это, и это не сработало, если количество запасов не было равно 1. Поскольку система автоматически уменьшает запас на 1 при продаже, я хотел бы показать правильный уровень запасов как ноль, но при необходимости отобразить его продукт, в идеале содержащий его как «Продано» на странице категории продукта. – Sara44

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