我正在使用woocommerce。简而言之,我需要找到属性术语值应为“ LIKE” 100值的产品。因此,它应该找到类似以下术语:100 / 104、100 / 99。
My URL search: domain.com/?pa_boltpcd=100
所以我有一个属性(pa_boltpcd),这是一个分类法。此分类法(pa_boltpcd)具有以下术语:
100
100/104
100/99
目前,它仅显示术语值正好为“ 100”的产品。为什么没有这样的运算符“ like”可以通过搜索“ 100”值来找到所有这三个术语。
我尝试过的事情:
function taxonomy_like( $q ) {
if(isset($q->query['pa_boltpcd'])){
$tax_query = (array) $q->get( 'tax_query' );
$termIds = get_terms([
'name__like' => '100',
'fields' => 'ids'
]);
$tax_query[] = array(
'taxonomy' => 'pa_boltpcd',
'field' => 'term_id',
'terms' => $termIds,
'operator' => 'IN'
);
$q->set( 'tax_query', $tax_query );
}
}
add_action( 'woocommerce_product_query', 'taxonomy_like' );
首先使用此挂钩,我在条件为“ LIKE”的条件下搜索值为100的术语,因此它将找到所有这些术语。
然后我收集找到的条款ID。
问题是它返回相同的结果,并且显示产品的term正好是100 ...
请给我一些提示怎么办???对不起,英语不好,请纠正我不清楚的地方。
答案 0 :(得分:0)
就像在税收查询中一样,您可以查询词条数组,它不能像SQL中那样使用通配符%
处理 LIKE 。希望get_terms()
在使用'name__like'
时可以做到这一点……
需要禁用产品属性复选框选项“
Enable Archives?
” 。
要测试以下代码,我首先使用3个术语100
,100/104
和100/99
向Woocommerce添加了产品属性“ boltpcd”。然后,我在3种不同的产品中设置了属性,每种产品都有不同的用语。对我来说,将?pa_boltpcd=100
添加到商店网址时,它可以工作并显示3种产品。
我使用类似的针对税收查询的挂钩对您的代码进行了非常小的更改:
add_filter( 'woocommerce_product_query_tax_query', 'custom_taxonomy_like', 10, 2 );
function custom_taxonomy_like( $tax_query, $query ) {
$taxonomy = 'pa_boltpcd';
if( ! isset($_GET[$taxonomy]) )
return $tax_query;
// The tax query
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => get_terms([ // Get terms "%LIKE%"
'name__like' => esc_attr( $_GET[$taxonomy] ),
'fields' => 'ids',
'taxonomy' => $taxonomy
])
);
return $tax_query;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试并可以正常工作。
我得到3种产品,它们分别为pa_boltpcd
分类法(100
,100/104
和100/99
)设置了不同的术语: