为什么分类查询运算符在 Wordpress 中没有 "LIKE"?
Why taxonomy query operator don't have "LIKE" in Wordpress?
我正在使用 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”值找到所有这 3 个术语。
我尝试了什么:
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。
- 之后,我创建了 tax_query,它可以通过我创建的 ID 进行搜索。
但问题是它 returns 相同的结果,它显示的产品的术语恰好是 100 ...
请给我一些提示该怎么做???抱歉英文不好,不明白的地方请指正。
在税务查询中,您可以查询一组术语,它不会像 SQL 那样处理带有通配符 %
的 LIKE .希望 get_terms()
在使用 'name__like'
时这样做...
The product attribute checkbox option "Enable Archives?
" need to be disabled.
为了测试以下代码,我首先将您的产品属性 "boltpcd" 添加到 Woocommerce 中,其中包含 3 个术语 100
、100/104
和 100/99
。然后我在 3 种不同的产品中设置了属性,每一种都有不同的术语。对我来说,在将 ?pa_boltpcd=100
添加到商店 url.
时,它可以显示 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
):
我正在使用 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”值找到所有这 3 个术语。
我尝试了什么:
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。
- 之后,我创建了 tax_query,它可以通过我创建的 ID 进行搜索。
但问题是它 returns 相同的结果,它显示的产品的术语恰好是 100 ...
请给我一些提示该怎么做???抱歉英文不好,不明白的地方请指正。
在税务查询中,您可以查询一组术语,它不会像 SQL 那样处理带有通配符 %
的 LIKE .希望 get_terms()
在使用 'name__like'
时这样做...
The product attribute checkbox option "
Enable Archives?
" need to be disabled.
为了测试以下代码,我首先将您的产品属性 "boltpcd" 添加到 Woocommerce 中,其中包含 3 个术语 100
、100/104
和 100/99
。然后我在 3 种不同的产品中设置了属性,每一种都有不同的术语。对我来说,在将 ?pa_boltpcd=100
添加到商店 url.
我使用针对税务查询的类似挂钩对您的代码进行了非常小的更改:
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
):