В этом уроке я покажу как скрыть отсутствующие товары со страницы каталога («Магазин»), категорий и меток товара.
Сделать это можно с помощью кода… и с помощью настроек в WooCommerce 😉
Перейдите в админ-панели в настройки WooCommerce, вкладка «Товары». Затем переключитесь на «Запасы» и поставьте галочку у «Видимость закончившихся товаров».
В принципе, после этого код вам не понадобится.
Но если вдруг вы как-то по другому захотите настроить видимость, вот вам код:
add_filter('pre_get_posts', 'myshop_show_in_stock', 25);
function myshop_show_in_stock($query) {
if(
!is_admin()
&& $query->is_main_query()
&& (is_shop() || is_product_category() || is_product_tag())
) {
$query->set(
'meta_query',
array(
array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT IN'
)
)
);
}
}
Где:
is_shop()
– условный тег, проверяет, находимся ли на странице «Магазин»is_product_category()
– проверяет, отображается ли страница категории товаровis_product_tag()
– позволяет проверить нахождение на страницах меток товаровpre_get_posts
– хук-событие, используется для изменения запроса.
Также в коде используется мета-поле _stock_status
, которое может иметь три статуса:
instock
– в наличииoutofstock
– нет в наличииonbackorder
– предзаказ
Значение данного поля настраивается в настройках товара во вкладке «Запасы».