В этом уроке я покажу как скрыть отсутствующие товары со страницы каталога («Магазин»), категорий и меток товара.

Сделать это можно с помощью кода… и с помощью настроек в 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 – предзаказ

Значение данного поля настраивается в настройках товара во вкладке «Запасы»: