gpt4 book ai didi

php - 如何使用 pre_get_posts 定位子 Woocommerce 类别

转载 作者:行者123 更新时间:2023-11-29 23:47:07 24 4
gpt4 key购买 nike

我创建了一家销售电子书和电子杂志的在线商店,对于书籍,我有一个包含子类别的“电子书”产品类别,对于杂志,我有一个包含“女性”等子类别的“电子杂志”类别、“男人”和“生意”。对于电子杂志,我创建了一个 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');

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

请帮忙

最佳答案

这尚未经过测试,但类似的东西应该可以工作。首先通过其子句获取您要查找的术语(以便于识别),然后获取作为目标术语的后代的所有术语。我不记得原始父术语是否作为查询结果返回,因此如果不是,请取消注释术语查询后面的行:

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 的文档。我最初将“fields”参数设置为“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.

关于php - 如何使用 pre_get_posts 定位子 Woocommerce 类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com