1

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

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

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

我试过下面的代码片段,但没有奏效:

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

2 回答 2

1

奥马尔,我正在度假,因此无法回复您的回答。我为此感到抱歉。

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

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

谢谢

于 2018-10-23T07:56:55.933 回答
0

如果您只想要产品而不获取品牌,我已将您的代码更新为以下(但请注意,将获取名称中包含“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_Query以防tax_query顶部的产品无法解决您的问题:

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

让我知道这是否适合您。

于 2018-10-14T07:44:07.693 回答