在Wordpress中,有没有办法按显示值而不是meta_value对自定义列进行排序?我的意思是我的元数值是一个数字,但我用现有的钩子操纵了这个数字,因为它是一个字符串。我想按字符串而不是数字排序。这是我现有的工作代码,它可以很好地排序 - 它不会按字母顺序排列:
add_action('manage_resource_posts_custom_column', 'my_manage_resource_columns', 10, 2);
function my_manage_resource_columns($column_name, $id) {
switch ($column_name) {
case 'type':
$id = get_the_ID();
$par = get_field('resource_type',$id);
$type = get_field('singular_name',$par);
echo $type;
break;
default:
break;
}
}
add_filter( "manage_edit-resource_sortable_columns", "my_last_modified_column_register_sortable" );
function my_last_modified_column_register_sortable( $columns ) {
$columns["type"] = "type";
return $columns;
}
add_filter( "request", "sort_column_by_modified" );
function sort_column_by_modified( $vars ){
if ( isset( $vars["orderby"] ) && "type" == $vars["orderby"] && $_GET['post_type']=='resource') {
$vars = array_merge( $vars, array(
'meta_key' => 'resource_type',
'orderby' => 'meta_value_num'
) );
}
return $vars;
}
因此,您可以根据数据库中的数值看到我在哪里添加列名的实际文本。它显示很好。我只需要它可以按该文本排序,而不是它所代表的值。有谁知道这是否可行/怎么做?
这是现在的列的屏幕截图。您可以看到它们确实按类型分组,但它按ID的数字顺序
提前致谢!
答案 0 :(得分:0)
如果要对多个元值的列进行排序,则将使用meta_query参数作为排序算法。举例说明何时需要对多个参数进行排序。假设你有季节和剧集列出的电视节目列表。仅按Episode排序会将所有剧集1放在一起,等等,但真正想要的是,当按照剧集排序时也按季节 - 剧集排序,因为这对管理员用户更具可读性和理解力。
要完成此操作,请在sort_column_by_modified函数中替换
$vars = array_merge( $vars, array(
'meta_key' => 'resource_type',
'orderby' => 'meta_value_num'
) );
与
$vars = array_merge( $vars, array(
'meta_query' => array(
array(
'meta_key' => 'season', // the column name
'order_by_num' => 'meta_value_num'
),
array(
'meta_key' => 'episode', // the column name
'order_by_num' => 'meta_value_num'
),
)
) );
对于其他类型的排序,请相应地调整meta_query。