我正在尝试按术语以WordPress WP_Query中的某些字符(即STAxxxx)开头的方式过滤tax_query。
假设我在WordPress管理员中存储了以下信息: 帖子类型:产品 分类学:品牌 品牌可用条款:阿迪达斯,锐步,彪马,耐克,Asics等。
如果用户在品牌文本框中输入“ a”,则应填充以“ a”开头的品牌。
我已经尝试了以下代码段,但是没有用:
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => $brand_name_field, '%',
'operator' => 'LIKE'
答案 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_Query
和tax_query
的操作来获取所有归类于这些品牌的产品,以防最上面的一个不能解决您的问题:
$products = new WP_Query([
'post_type' => 'product',
'tax_query' => [
'taxonomy' => 'brand',
'field' => 'term_id',
'terms' => $brands,
'operator' => 'IN'
]
]);
让我知道这是否对您有用。