Ну, это было чертовски много сложнее, чем я думал, что это будет. Решение состоит из трех частей.
Прежде всего, вы должны добавить галочку к продукту метаболизма 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);
}
Спасибо за подробный ответ, я посмотрю на реализацию этого, как только смогу, и дам вам знать. – Sara44
Я действительно протестировал этот, поэтому считаю, что он должен работать. Дай мне знать. – helgatheviking
Я пробовал это, и это не сработало, если количество запасов не было равно 1. Поскольку система автоматически уменьшает запас на 1 при продаже, я хотел бы показать правильный уровень запасов как ноль, но при необходимости отобразить его продукт, в идеале содержащий его как «Продано» на странице категории продукта. – Sara44