get_terms - 在给定 'include' 数组时获取结果总数
get_terms - get total number of results when 'include' array is given
我想通过调用get_terms
获得12个term对象;我有一个特定的 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
来完成吗?
所以...这基本上行不通。
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);
所以,为了介绍它的作用:
- 获取最多 12 个位置字词
- 从排除了我们之前检查过的项的列表中获取剩余的项数
- 将两个列表合并在一起
这应该会为您提供所需的结果。您可以对其进行整理,使用一些条件来确定后一部分是否需要 运行,等等。建立在总体思路上并使其适合您尝试使用代码执行的操作。
您尝试做的事情没有多大意义。
如果您已经知道您要在数组中排在第一位的三个词的身份,那么进行查询以获取这些词就有点无关紧要了。您可以简单地进行两个单独的查询并合并结果。
例如:
$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 );
在不了解更多数据的情况下,做更多事情并不容易。
稍微猜测一下,因为您已经在查询中使用了术语元,您可以在顺序中添加另一个术语元,然后使用 that 对结果进行排序。这样你就不需要硬编码你想要放在最前面的前三个术语,而且你只需要进行一个查询。
例如:
$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
) 设置一个新的术语元数据,并在其中保存您想要的顺序。您将需要更多操作(例如,处理没有定义顺序的术语等)。
从逻辑上讲,我进一步假设这三个词也是特色词。否则,发出两个请求并合并仍然是唯一合乎逻辑的方式。
我想通过调用get_terms
获得12个term对象;我有一个特定的 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
来完成吗?
所以...这基本上行不通。
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);
所以,为了介绍它的作用:
- 获取最多 12 个位置字词
- 从排除了我们之前检查过的项的列表中获取剩余的项数
- 将两个列表合并在一起
这应该会为您提供所需的结果。您可以对其进行整理,使用一些条件来确定后一部分是否需要 运行,等等。建立在总体思路上并使其适合您尝试使用代码执行的操作。
您尝试做的事情没有多大意义。
如果您已经知道您要在数组中排在第一位的三个词的身份,那么进行查询以获取这些词就有点无关紧要了。您可以简单地进行两个单独的查询并合并结果。
例如:
$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 );
在不了解更多数据的情况下,做更多事情并不容易。
稍微猜测一下,因为您已经在查询中使用了术语元,您可以在顺序中添加另一个术语元,然后使用 that 对结果进行排序。这样你就不需要硬编码你想要放在最前面的前三个术语,而且你只需要进行一个查询。
例如:
$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
) 设置一个新的术语元数据,并在其中保存您想要的顺序。您将需要更多操作(例如,处理没有定义顺序的术语等)。
从逻辑上讲,我进一步假设这三个词也是特色词。否则,发出两个请求并合并仍然是唯一合乎逻辑的方式。