2014-03-25 89 views
2

在Wordpress中,有没有办法让自定义列按显示值排序而不是meta_value?我的意思是说,我的元值是一个数字,但我已经使用一个现有的钩子操纵了这个数字,因为它是一个字符串。我想按字符串排序而不是数字。这是我现有的,工作代码,会就好了排序它 - 它只是将不会按字母顺序排列:WordPress的如何添加管理自定义列按显示值排序

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

enter image description here

感谢的数字顺序!

回答

0

如果您想对多个元值的列进行排序,您将为排序算法使用meta_query参数。给出一个例子,说明您何时想要对多个参数进行排序。假设你有一个按季节和情节列出的电视节目列表。仅仅通过Episode进行排序会将所有的Episode 1放在一起等等,但是当按照Episode进行排序时,真正想要的还是按照季节剧集进行排序,因为这对于管理员用户来说更具可读性和理解性。

要做到这一点,在sort_column_by_modified功能,具有

$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' 
      ), 
     ) 
    )); 

更换

$vars = array_merge($vars, array(
     'meta_key' => 'resource_type', 
     'orderby' => 'meta_value_num' 
    )); 

对于其他类型的不爽,适当地调整你的meta_query。

相关问题