【问题标题】:How do I targert child Woocommerce Categories with pre_get_posts如何使用 pre_get_posts 定位子 Woocommerce 类别
【发布时间】:2014-09-15 21:34:02
【问题描述】:

我创建了一个销售电子书和电子杂志的在线商店,对于书籍,我有一个带有子类别的“电子书”产品类别,对于杂志,我有一个带有子类别的“电子杂志”类别,例如“女性” 、“男人”和“商业”。对于电子杂志,我创建了一个 pre_get_posts 函数,旨在修改我商店的整个杂志部分的查询。这是我的代码

        function magazine_filter($query) {
            if ( !is_admin() && $query->is_main_query() && $query->query_vars['product_cat'] ==  'emagazines' :

                 // My code goes here

            endif ;
        }

        add_action('pre_get_posts','magazine_filter');

问题是,在我定位“电子杂志”类别后,我的功能只影响电子杂志类别,而不影响“女性”、“男性”、“商业”等子类别。显而易见的解决方案是手动定位我所有的子类别也是如此,但这太冗长了。我希望这是动态的,以便此函数在创建时始终针对“eMagazines”类别的任何子类别。

请帮忙

【问题讨论】:

    标签: php mysql wordpress woocommerce


    【解决方案1】:

    这是未经测试的,但这样的事情应该可以工作。这首先通过其 slug 获取您要查找的术语(以便于识别),然后获取作为目标术语的后代的所有术语。我不记得原始父项是否在查询中作为结果返回,所以如果不是,请取消对项查询后的行的注释:

    function magazine_filter($query) {
        $emag = get_term_by('slug', 'emagazines', 'product_cat');
        $tree = get_terms('product_cat', array(
            'fields'=>'ids', //Should be 'ids' not 'id'
            'hide_empty'=>false,
            'child_of'=>$emag->term_id
        ));
        //$tree[] = $emag->term_id; //Uncomment this if the emagazines term ID isn't included.
        if ( !is_admin() && $query->is_main_query() && in_array($query->query_vars['product_cat'], $tree) ) :
    
                 // My code goes here
    
        endif ;
    }
    add_action('pre_get_posts','magazine_filter');
    

    编辑:这是get_terms 上的文档。我最初将“字段”参数设置为 'id' 而不是导致问题的 'ids'

    我不知道$query->query_vars['product_cat']返回什么,但如果是slug这个词,考虑改成:

    $tree = get_terms('product_cat', array(
        'fields'=>'id=>slug',
        'hide_empty'=>false,
        'child_of'=>$emag->term_id
    ));
    //$tree[$emag->term_id] = $emag->slug; //Uncomment this if the emagazines term slug isn't included.
    

    【讨论】:

    • 如果 $query->query_vars['product_cat'] 是通过其 slug 引用该类别,请考虑将 'id' 更改为 slug
    • get_terms() 在 pre_get_posts 中有效吗? $tree 如果可能的话,将返回一个似乎是空数组的东西。我将“id”更改为“slug”
    • 我在猜测您的分类实际上叫什么。它是否注册为“product_cat”?还是别的什么?
    • 是的,它是一个带有术语 slug 'emagazines' 的 woocommerce 产品类别,$emag 正在返回正确的值以便 oart 工作,它是 $tree 看起来是空的。
    • 终于成功了,我已经用解决方案更新了你的答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多