1

创建自定义主题时,我必须更改 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的产品

在我看来,我必须在调用 archive-product.php 模板时更改 $wp_query,但我不知道如何以正确的方式实现这一点。请你帮助我好吗?

要回答“为什么?”这个问题,目的是在页面顶部添加一个带有子类别的选择框,并动态过滤产品列表客户端以仅显示所选类别的产品或所有产品(如果没有)或选择了“所有类别”选项。

4

1 回答 1

0

所以基本上,如果一个产品类别有一个父类别,你想检索父类别的所有产品。

为此,您需要按照以下几行编辑查询:

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

注意,我没有测试过这个功能,所以你可能需要适应你的需要。

希望有帮助!

于 2019-01-03T16:55:52.393 回答