更改分类术语的默认顺序-PRE_GET_TERMS

时间:2019-05-26 作者:SkyRar

我想通过其“term\\u order”值而不是管理端的“name”来更改默认的分类术语顺序。所以我尝试了下面的方法。但它不工作,php内存耗尽。

function uc_order_term( $wp_query ) {
    $wp_query->query(
        array(
            \'taxonomy\' => \'category\',
            \'orderby\' => \'term_order\',
            \'order\' => \'ASC\'
        )
    );
}
add_action( \'pre_get_terms\', \'uc_order_term\');
然而,以类似的方式,我尝试按menu\\u顺序对帖子进行排序,结果成功了。

function uc_order_post( $wp_query ) {

            $wp_query->set(\'orderby\', \'menu_order\');
            $wp_query->set(\'order\', \'ASC\');

}
add_action( \'pre_get_posts\', \'uc_order_post\', 1 );

enter image description here

2 个回复
SO网友:SkyRar

现在,我可以使用下面的代码片段按term\\u顺序对分类术语进行排序。但我仍在寻找原始问题“如何使用pre\\u get\\u术语”的答案。

function foo_tax_order($orderby, $args){

        return \'t.term_order\';
}
add_filter(\'get_terms_orderby\', \'foo_tax_order\', 10, 2);

SO网友:grappler

这应该可以通过get_terms_args. 该代码仅更改类别的顺序。

function wp_custom_sort_get_terms_args( $args, $taxonomies ) {
    if ( isset( $taxonomies[ \'category\' ] ) ) {
        $args[\'orderby\'] = \'term_order\';
        $args[\'order\']   = \'ASC\';
    }
 
    return $args;
}
add_filter( \'get_terms_args\', \'wp_custom_sort_get_terms_args\', 10, 2 );

https://developer.wordpress.org/reference/hooks/get_terms_args/