按以字符开头的术语过滤 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_Query
和 tax_query
来获取这些品牌下分类的所有产品,以防顶部的那个不能解决您的问题问题:
$products = new WP_Query([
'post_type' => 'product',
'tax_query' => [
'taxonomy' => 'brand',
'field' => 'term_id',
'terms' => $brands,
'operator' => 'IN'
]
]);
让我知道这是否适合你。
Omar,我正在休假,因此无法回复您的回答。我很抱歉。
None 您的建议对我有用。然后我对 Stack overflow 进行了更多研究,找到了一个对我有用的有用链接。
谢谢
我正在尝试在 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_Query
和 tax_query
来获取这些品牌下分类的所有产品,以防顶部的那个不能解决您的问题问题:
$products = new WP_Query([
'post_type' => 'product',
'tax_query' => [
'taxonomy' => 'brand',
'field' => 'term_id',
'terms' => $brands,
'operator' => 'IN'
]
]);
让我知道这是否适合你。
Omar,我正在休假,因此无法回复您的回答。我很抱歉。
None 您的建议对我有用。然后我对 Stack overflow 进行了更多研究,找到了一个对我有用的有用链接。
谢谢