【问题标题】:Wordpress How to add Admin Custom Column Sorting by display valueWordpress如何添加管理员自定义列按显示值排序
【发布时间】:2014-03-25 21:20:32
【问题描述】:

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    如果您想根据多个元值对一列进行排序,您将为排序算法使用 meta_query 参数。举例说明何时需要对多个参数进行排序。假设您有一个按季节和剧集列出的电视节目列表。单独按 Episode 排序会将所有 Episode 1 放在一起,等等,但真正想要的是,当按 Episode 排序时也按 Season-Episode 排序,因为这对管理员用户来说更具可读性和理解力。

    为此,在 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。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2015-01-06
      • 2016-12-05
      • 1970-01-01
      • 2019-05-19
      • 2017-07-30
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多