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) 设置一个新的术语元数据,并在其中保存您想要的顺序。您将需要更多操作(例如,处理没有定义顺序的术语等)。

从逻辑上讲,我进一步假设这三个词也是特色词。否则,发出两个请求并合并仍然是唯一合乎逻辑的方式。