我为媒体附件创建了一个名为“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() ......
非常感谢任何帮助。
答案 0 :(得分:0)
试试这个:
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)
对我来说,我制作了一个自定义分类法,在那个自定义分类法中,我有一个自定义元。我想在管理员后端有一个列,并使其可以排序。为自定义分类中的自定义分类进行可排序的工作,我做了这个。
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,然后使用上面提供的回调。