按以字符开头的术语过滤 tax_query

Filter tax_query by term starting with character

我正在尝试在 WordPress WP_Query.

中按以某些字符(即 STAxxxx)开头的术语过滤 tax_query

假设我在 WordPress 管理员中存储了以下信息: Post 类型: 产品 分类: 品牌 适用于品牌的术语: 阿迪达斯、锐步、彪马、耐克、亚瑟士等

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

我试过下面的代码片段,但没有成功:

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

如果您只想要产品而不获取品牌,我已将您的代码更新为以下内容(但请注意,所有名称中包含 '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' 的品牌,因此将获取 Adidas、Puma 和 Asics。这在 WordPress 3.7 中已更改,之前 name__like 匹配以字符串开头的术语。

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

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


获取品牌后,您还可以通过执行以下 WP_Querytax_query 来获取这些品牌下分类的所有产品,以防顶部的那个不能解决您的问题问题:

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

让我知道这是否适合你。

Omar,我正在休假,因此无法回复您的回答。我很抱歉。

None 您的建议对我有用。然后我对 Stack overflow 进行了更多研究,找到了一个对我有用的有用链接。

谢谢