我希望通过调用get_terms
获得12个术语对象;我有一个特定的terms_ids
数组,应该是第一个。
到目前为止,这是我的查询:
$term_args = array(
'taxonomy' => 'coupon_store',
'number' => 12,
'include' => $location_terms,
'meta_query' => array(
array(
'key' => '_wpc_is_featured',
'value' => 'on',
'compare' => '=',
),
)
);
$store_terms = get_terms( $term_args );
问题在于,由于$location_terms
仅包含3个值,因此整个结果计数也限制为3.我知道根据get_terms文档,这不太可能。
在获得该数组中的3后,有没有得到其余9个结果的黑客?
更新
我通过使用@Yoda答案中描述的2个查询来实现它。有没有办法只使用get_terms
一次完成它。
答案 0 :(得分:1)
所以...这基本上不起作用。
include
参数在SQL查询中设置where条件,要求所有结果都在include
数组中。
所以,这对你所追求的事情并不好。
但是,我确实为您提供了解决方案!
$term_args = array(
'taxonomy' => 'coupon_store',
'number' => 12,
'include' => $location_terms,
'meta_query' => array(
array(
'key' => '_wpc_is_featured',
'value' => 'on',
'compare' => '=',
),
)
);
$store_terms_location = get_terms( $term_args );
$term_args = array(
'taxonomy' => 'coupon_store',
'number' => 12 - count($store_terms_location), // only get as many as you still need
'exclude' => $location_terms,
'meta_query' => array(
array(
'key' => '_wpc_is_featured',
'value' => 'on',
'compare' => '=',
),
)
);
$store_terms_other = get_terms( $term_args );
// merge the two arrays together in order of priority
$store_terms = array_merge($store_terms_location, $store_terms_other);
所以,要涵盖这样做:
这可以为您提供所需的结果。你可以整理一下,使用一些条件来确定后一部分是否需要运行等等。建立在一般的想法上并使它适合你尝试用你的代码。
答案 1 :(得分:1)
你要做的事情并没有多大意义。
如果您已经知道您在数组中首先获得的三个术语的标识,那么进行查询以获得这些术语有点无关紧要。您可以简单地进行两个单独的查询并合并结果。
E.g:
$first_terms = array(
'taxonomy' => 'coupon_store',
'include' => $location_terms,
);
$store_terms_1 = get_terms( $term_args );
$remaining_terms = array(
'taxonomy' => 'coupon_store',
'number' => 9,
'exclude' => $location_terms,
'meta_query' => array(
array(
'key' => '_wpc_is_featured',
'value' => 'on',
'compare' => '=',
),
)
);
$store_terms_2 = get_terms( $term_args );
$resulting_terms = array_merge( $store_terms_1, $store_terms_2 );
在不了解您的数据的情况下,要做更多事情并不容易。
猜测一下,因为您已在查询中使用术语元数据,您可以在订单中添加另一个术语元数据,并使用 来订购结果。这样您就不需要对前面的三个术语进行硬编码,,您只需要进行一次查询。
E.g:
$store_terms = [
'taxonomy' => 'coupon_store',
'number' => 12,
'meta_key' => 'coupon_store_term_order,
'orderby' => 'meta_value_num',
'meta_query' => [
[
'key' => '_wpc_is_featured',
'value' => 'on',
'compare' => '=',
],
]
];
这样,您必须为您的条款(coupon_store_term_order
)设置一个新的术语元,并保存您想要的订单。你需要更多的摆弄(例如处理没有定义顺序的条款等)。
从逻辑上讲,我进一步假设这三个术语也是特色术语。否则,发出两个请求并合并仍然是唯一合乎逻辑的方法。