为什么分类查询运算符在 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' );
  1. 我首先使用此挂钩搜索条件为 'LIKE' 且值为 100 的术语,因此它会找到所有这些术语。

  2. 然后我收集找到的术语 ID。

  3. 之后,我创建了 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 个术语 100100/104100/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 分类术语集 100100/104100/99: