按自定义元数据(pre_get_terms)对自定义分类的术语进行排序

时间:2017-05-05 03:24:26

标签: wordpress hook custom-taxonomy taxonomy-terms

我为媒体附件创建了一个名为“attach_cats”的自定义分类。分类中的每个术语都有自定义术语元数据,其键为“term_order”,元值为整数。我在“edit-tag.php”页面添加了一个自定义列,显示了'term_order'的值。

现在我想将这些条款命令为'orderby''term_order'的值。我一直在“edit.php?post_type = page”上使用以下函数执行此操作:

add_action('pre_get_posts', 'sort_by_meta_key');
function sort_by_meta_key($query){
    global $pagenow;
    if(is_admin()
        && 'edit.php' == $pagenow
        && isset($_GET['post_type'])  && $_GET['post_type']=='gallery'){
        $query->set( 'meta_key', 'gallery_pos' );
        $query->set( 'orderby', 'meta_value_num' );
        $query->set( 'order', 'ASC' );
    }
}

但是,当我尝试使用“pre_get_terms”使用“terms”而不是“posts”时,它不起作用。这就是我所拥有的:

add_action('pre_get_terms', 'term_sort_order');
function term_sort_order($query){
    global $pagenow;
    if(is_admin()
        && 'edit-tags.php' == $pagenow
        && isset($_GET['post_type'] )  && $_GET['post_type']=='attachment' ){
        $query->set( 'meta_key', 'term_order' );
        $query->set( 'orderby', 'meta_value_num' );
        $query->set( 'order', 'ASC' );
    }
}

// THIS RETURNS: Fatal error: Call to undefined method WP_Term_Query::set() ......

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

试试这个:

https://pastebin.com/vr2sCKzX

public function pre_get_terms( $query ) {
    $meta_query_args = array(
        'relation' => 'AND', // Optional, defaults to "AND"
        array(
            'key'     => 'order_index',
            'value'   => 0,
            'compare' => '>='
        )
    );
    $meta_query = new WP_Meta_Query( $meta_query_args );
    $query->meta_query = $meta_query;
    $query->orderby = 'position_clause';
}

答案 1 :(得分:0)

对我来说,我制作了一个自定义分类法,在那个自定义分类法中,我有一个自定义元。我想在管理员后端有一个列,并使其可以排序。为自定义分类中的自定义分类进行可排序的工作,我做了这个。

https://pastebin.com/vr2sCKzX

public function pre_get_terms( $query ) {
$meta_query_args = array(
    'relation' => 'AND', // Optional, defaults to "AND"
    array(
        'key'     => 'order_index',
        'value'   => 0,
        'compare' => '>='
    )
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = 'position_clause';

} 我在此链接中找到了答案https://core.trac.wordpress.org/ticket/34996

我只需要调整@ eherman24评论中提供的答案

不要忘记添加动作钩子pre_get_terms,然后使用上面提供的回调。