2

我为媒体附件创建了一个名为“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”使用“条款”而不是“帖子”时,它不起作用。这是我所拥有的:

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() ......

任何帮助将不胜感激。

4

2 回答 2

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 然后使用上面提供的回调。

于 2017-11-10T14:14:41.190 回答
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';
}
于 2017-11-10T13:59:07.193 回答