Wordpress如何按显示值添加管理员自定义列排序

时间:2014-03-25 21:20:32

标签: php wordpress jquery-ui-sortable backend custom-post-type

在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的数字顺序

enter image description here

提前致谢!

1 个答案:

答案 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。