Woocommerce: отображать родительскую категорию (любую) вместо текущей категории

Создавая собственную тему, я должен изменить поведение WooCommerce при отображении категории продукта.

Поведение по умолчанию — отображать подкатегории и / или продукты для выбранной пользователем категории. Например, подкатегории и / или продукты для суб-суб-category_a при запросе https://wordpress_site/product-category/category_a/sub-category_a/sub-sub-category_a/

Чего я хочу достичь, так это либо:

  • сохранить поведение по умолчанию, если текущая категория не имеет родителя (т.е. https://wordpress_site/product-category/category_a)
  • изменить поведение по умолчанию, если текущая категория имеет родителя (https://wordpress_site/product-category/category_a/sub-category_a/sub-sub-category_a/) и вместо этого отобразить товары для родительской категории суб-category_a вместо продуктов для текущей категории суб-суб-category_a

По моему мнению, я должен изменить $ wp_query, когда вызывается шаблон archive-product.php, но я понятия не имею, как добиться этого правильным способом.
Не могли бы вы мне помочь?

Чтобы ответить на вопрос «почему?», Цель состоит в том, чтобы сверху добавить поле выбора с дочерними категориями вверху страницы и динамически отфильтровать клиентскую часть списка продуктов, чтобы показывать только продукты для выбранной категории или все продукты, если их нет, или выбран вариант «все категории».

1

Решение

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

Для этого вам нужно отредактировать запрос, выполнив следующие строки:

function prefix_get_parent_category_products( $query ){

// check we're in the right place and the category has a parent
if( $query->is_tax('product_cat') && !empty($query->query_vars['post_parent']) ){

// edit the tax query to include the parent category
$query->set('tax_query', array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $query->query_vars['post_parent'],
'include_children' => true
)
}
return;
}

add_action( 'pre_get_posts', 'prefix_get_parent_category_products' );

Обратите внимание, я не тестировал эту функцию, поэтому вам может потребоваться адаптироваться к вашим потребностям.

Надеюсь, это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]