Wordpress get_categories()按“term_order”排序?

时间:2013-03-05 20:14:49

标签: php wordpress

根据WordPress codex,get_categories()方法为其orderby属性接受以下参数:

**orderby** (string) Sort categories alphabetically or by unique category ID. The default is sort by Category ID. Valid values:

id
name - default
slug
count
term_group

然而,看一下“wp_term_relationships”表,有一个看似未使用的字段叫做“term_order”,对于我创建的每个类别,都设置为0。

是否可以使用term_order字段作为类别的索引排序顺序?

我已将增量值添加到此字段中以用于我的类别,并且我尝试使用下面的代码将订单传递给函数,但无效:

    $cat_args=array(

        'hierarchical' => 0,

        'orderby' => 'term_order',

        );


        $categories = get_categories($cat_args);

3 个答案:

答案 0 :(得分:2)

很多年后,

您可以将此代码添加到您的functions.php中:

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
    return $query_vars['orderby'] == 'term_order' ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

此代码强制WP在您的字词查询中使用 orderby => term_order 参数。

答案 1 :(得分:1)

@cédric-dagherir-dahive的答案表明,使用get_terms_orderby过滤器是一种将术语按添加到对象(帖子)的顺序显示的好方法。但是,它不适用于所有术语查询,并且会产生以下错误:

“订单子句”中的未知列“ term_order”。

简单来说,某些术语查询仅从(wp_termswp_term_taxonomy)数据库表中获取数据,而没有INNER JOIN和(wp_term_relationships)表,具有term_order字段。因此出现错误消息。

仅当查询关注分类法和对象(例如order by term_order)之间的多对多关系时,才应添加get_the_terms子句。

因此,我更新了代码以首先检查术语查询是否涉及对象,然后再将term_order添加到order子句:

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
        return ( ! is_null($query_vars["object_ids"]) ) ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

答案 2 :(得分:0)

我搜索了所有wordpress功能,而'term_order'唯一能用wp_get_object_terms的功能here,你可以看到它的功能{{3}}。

从现在开始,即使wordpress不使用它来过滤get_categories()中的类别,你或其他主题/插件开发者也可以使用上面的函数获取object_terms并按term_order对它们进行排序/过滤。