按字词开头的字词过滤tax_query

时间:2018-10-14 07:34:07

标签: wordpress taxonomy-terms

我正在尝试按术语以WordPress WP_Query中的某些字符(即STAxxxx)开头的方式过滤tax_query。

假设我在WordPress管理员中存储了以下信息: 帖子类型:产品 分类学:品牌 品牌可用条款:阿迪达斯,锐步,彪马,耐克,Asics等。

如果用户在品牌文本框中输入“ a”,则应填充以“ a”开头的品牌。

我已经尝试了以下代码段,但是没有用:

'taxonomy' => 'brand',
'field' => 'slug',
'terms' => $brand_name_field, '%',
'operator' => 'LIKE'

2 个答案:

答案 0 :(得分:1)

Omar,我正在小休假,因此无法回复您的答案。对此我感到抱歉。

您的任何建议对我都没有用。然后,我对堆栈溢出进行了更多研究,并找到了对我有用的有用链接。

https://stackoverflow.com/a/29994568/5196594

谢谢

答案 1 :(得分:0)

如果您只想获取产品而不获取品牌,我已将代码更新为以下内容(但请注意,将提取名称中包含“ a”(不一定以“ a”开头)的所有品牌):< / p>

'taxonomy' => 'brand',
'field' => 'name',
'terms' => $brand_name_field
'operator' => 'LIKE'

如果必须以'a'开头,建议您在用户输入至少2或3个字符后进行查询,以减少获取不必要品牌的可能性。


如果只想获取名称以'a'开头的品牌,则不应该使用WP_Query,而需要使用get_terms()参数集。{ / p>

以下将解决问题:

name__like

请注意,这不会获取以'a'开头的品牌,而是会获取所有包含'a'的品牌,因此将获取adidas,Puma和Asics。在WordPress 3.7中对此进行了更改,当时以前使用名称__类似的匹配项(以字符串开头)。

如果您还想同时搜索术语名称和子词,则可以使用$brands = get_terms([ 'taxonomy' => 'brand', 'name__like' => 'a' //you can use a variable in your case $search 'fields' => 'ids' //If you cant to fetch all term data use 'all' ]); 代替search

您可以在这里https://developer.wordpress.org/reference/classes/wp_term_query/__construct/

获得更多信息

获取品牌之后,您还可以通过对name__like进行以下WP_Querytax_query的操作来获取所有归类于这些品牌的产品,以防最上面的一个不能解决您的问题:

$products = new WP_Query([
    'post_type' => 'product',
    'tax_query' => [
      'taxonomy' => 'brand',
      'field' => 'term_id',
      'terms' => $brands,
      'operator' => 'IN'
    ]
]);

让我知道这是否对您有用。