get_terms - 获得'包含'的结果总数给出了数组

时间:2017-12-08 03:24:29

标签: php wordpress custom-taxonomy

我希望通过调用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一次完成它。

2 个答案:

答案 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);

所以,要涵盖这样做:

  • 获取最多12个地理位置
  • 从排除我们之前检查过的字段的列表中获取剩余的字词数
  • 将两个列表合并在一起

这可以为您提供所需的结果。你可以整理一下,使用一些条件来确定后一部分是否需要运行等等。建立在一般的想法上并使它适合你尝试用你的代码。

答案 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)设置一个新的术语元,并保存您想要的订单。你需要更多的摆弄(例如处理没有定义顺序的条款等)。

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