Woocommerce: отображать родительскую категорию (любую) вместо текущей категории - PullRequest
0 голосов
/ 03 января 2019

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

Поведение по умолчанию - отображение подкатегорий и / или продуктов для выбранной пользователем категории. Например, подкатегории и / или продукты для sub-sub-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/), и вместо этого отобразить продукты для родительской категории sub-category_a вместо продуктов для текущей категории sub-sub -category_a

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

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

1 Ответ

0 голосов
/ 03 января 2019

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

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

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' );

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

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

...