Как в WooCommerce убрать товары определенной категории с главной страницы магазина?
Представим себе ситуацию, когда на главной странице магазина нужно из списка товаров удалить товары какой-то конкретной категории, например, «Подарочные сертификаты» или ещё какой-то другой мало значимой группы товаров.
Для этого нужно на событие pre_get_posts
повесить кастомное действие, в котором следует сначала убедиться, что выполняется получение списка товаров именно на главной странице, а затем отсеять товары ненужной категории, скорректировав параметры запроса $query
. Для этого в свойстве terms
следует передать массив отбрасываемых категорий, а в operator
отрицание вхождения в указанный список.
Рассматриваемое событие тригерится при каждом запросе WP_Query
, непосредственно перед самим запросом в БД. Используется для того, чтобы модифицировать запрос, что мы и делаем в рамках решения обозначенной в заголовке статьи задачи. Важно помнить, что исключить товары заданной категории мы хотим в публичной части магазина, поэтому не забываем проверять, что запрос относится именно к ней с помощью условия !is_admin()
.
Таким образом, для отсеивания товаров заданных категорий с главной страницы магазина WooCommerce нужно добавить в конец файла /wp-content/themes/название_вашей_темы/functions.php
следующий кусок кода:
// Удаляет товары заданных категорий из списка на главной странице магазина
function remove_goods_category($query) {
if ($query->is_main_query() || $query->is_post_type_archive()) {
if (!is_admin() && is_shop()) {
$query->set("tax_query", array(array(
"taxonomy" => "product_cat",
"field" => "slug",
"terms" => array("gifts"),
"operator" => "NOT IN"
)));
}
}
}
add_action("pre_get_posts", "remove_goods_category");
Захотелось вообще убрать с главной страницы магазина католог (который настраивается из админки) и вывести его шорткодом. Просто нужно несколько блоков контента расположить до вывода категорий товаров. А вот как это сделать — непонятно :-\
Благодарю. Всё получилось!)