【问题标题】:Woocommerce: display parent category (is any) instead of current categoryWoocommerce:显示父类别(是任何)而不是当前类别
【发布时间】:2019-05-30 06:35:30
【问题描述】:

创建自定义主题后,我必须更改 WooCommerce 在显示产品类别时的行为方式。

默认行为是为用户选择的类别显示子类别和/或产品。例如,当请求 https://wordpress_site/product-category/category_a/sub-category_a/sub-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-子类别_a

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

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

【问题讨论】:

    标签: php wordpress woocommerce wordpress-theming woocommerce-theming


    【解决方案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' );
    

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

    希望有帮助!

    【讨论】:

    • 没有。如果请求的类别有父类别,我想显示父类别(及其子类别的所有产品和产品)而不是请求的类别。
    • @MaxAuray 道歉 - 我显然误解了。但是,使用相同的方法应该可以实现您所需要的。一分钟后我会编辑我的答案...
    • @MaxAuray 我已经更新了我的答案——希望这次对我更有帮助!关键是您需要使用pre_get_posts 修改查询,然后将税务查询更改为使用父类别的term_id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2021-01-09
    • 2017-05-05
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多