根据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);
答案 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_terms
和wp_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对它们进行排序/过滤。