Get_Terms‘Numbers’参数似乎不起作用

时间:2017-10-22 作者:johnh10

为什么get_terms() 是否按要求返回最多10个结果?我很困惑。

    $args = array(
            \'taxonomy\'      => \'video_tag\',
            \'parent\'        => 0,
            \'number\'        => 10   
    );      
    error_log("JPH get_terms args: " . print_r($args,true));
    $children = get_terms( $args );
    error_log("JPH taxonomy: " . count( $children) . " total");
日志中的结果输出为

JPH get\\u terms参数:数组\\n(\\n[父]=>0\\n[数字]=>10\\n[分类]=>视频\\u标记\\n)\\n JPH分类:总计24806

我正在使用PHP 7.1和WordPress 4.8.2

2 个回复
SO网友:johnh10

因此,这里有一些与此问题有关的其他人的信息。

get_terms 不会使用number 参数,例如如果传入parent 参数或如果hierarchical 参数为true. 在这些情况下,我尝试了两种变通方法,都不太好。

你可以打电话get_terms 然后执行array_slice 之后的结果。然而,如果您有大量的分类法,那么WordPress可能会在get_terms 电话,这是我最初的问题。

您可以连接到过滤器terms_clauses 并强制get_terms 调用以在其sql调用中使用限制。但是,这适用于的所有调用get_terms 跨越WordPress,而不仅仅是我自定义代码中的WordPress,我不想造成意想不到的后果。

SO网友:birgire

请在WP_Term_Query [src]:

// Don\'t limit the query results when we have to descend the family tree.
if ( $number && ! $hierarchical && ! $child_of && \'\' === $parent ) {
    if ( $offset ) {
        $limits = \'LIMIT \' . $offset . \',\' . $number;
    } else {
        $limits = \'LIMIT \' . $number;
    }
} else {
    $limits = \'\';
}
其中默认情况下,child\\u为0,parent为空字符串,hierarchy为true.

让我们检查两个案例:

A) 将术语结果限制为hierarchical 分类法,我们可以使用:

$args = [
    \'taxonomy\'     => \'category\',
    \'parent\'        => 0,
    \'number\'        => 10,
];
在这种情况下WP_Term_Query 获取所有顶级术语,然后使用数组切片[src] 根据输入的数字限制结果。对于分页,我们还可以添加偏移量。

B) 如果是non-hierarchical 分类法,我们可以使用:

$args = [
    \'taxonomy\'     => \'post_tag\',
    \'number\'        => 10,
];
其中,我们不需要显式地将父级设置为0。每个学期都是顶级的。在这里,术语结果受到以下限制:LIMIT 在SQL查询中。

结束

相关推荐

在前端更新/保存wp_Terms_Checklist生成的项目

我在一个前端页面上显示了自定义帖子类型的自定义分类列表,其中显示了用户以前选中的所有项目。我已将其正确显示,但我无法确定如何保存任何新的/更改的选择。这是我用来显示术语的代码:$args = array( \'descendants_and_self\' => 0, \'selected_cats\' => false, \'popular_cats\' => false, \'walke