按以字符开头的术语筛选tax_query



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

假设我在WordPress Admin中存储了以下信息:帖子类型:产品分类:品牌适用于品牌的条款:阿迪达斯、锐步、彪马、耐克、亚西斯等。

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

我尝试了下面的代码片段,但它不起作用:

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

奥马尔,我正在度假,因此无法回复您的答案。对此我很抱歉。

你的建议都不适合我。然后我对 Stack 溢出进行了更多研究,并找到了一个对我有用的链接。

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

谢谢

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

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

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


如果你只想得到名称以"a"开头的品牌,你不应该做WP_Query,你需要将get_terms()name__like参数集一起使用。

以下方法可以解决问题:

$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'
]);

请注意,这不会抓取以"a"开头的品牌,但会抓取所有包含"a"的品牌,因此阿迪达斯、彪马和 Asics 将被抓取。这在WordPress 3.7中发生了变化,当时以前name__like匹配以字符串开头的术语。

如果还想同时搜索术语名称和 slug,可以使用search而不是name__like

您可以在此处获取更多信息 https://developer.wordpress.org/reference/classes/wp_term_query/__construct/

获取品牌

后,您还可以通过对tax_query执行以下WP_Query来获取这些品牌下的所有产品,以防顶部的品牌无法解决您的问题:

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

让我知道这是否适合您。

最新更新