管理中可排序自定义列的初始排序顺序

时间:2014-12-29 作者:Madivad

我在帖子的管理区域创建了许多“视图”栏。这方面有几个教程,事实上我确实使用了其中的一些来获得最终结果。

它按预期工作,但我希望初始排序顺序是数字降序,但不幸的是,当您第一次选择它时,它总是升序。再次单击它将显示一个降序列表。我希望它在第一次选中时最初是降序的,然后如果你想升序(这不太可能),我会再次单击它。

我已经尝试了很多解决方案(都是我自己的设备),但没有一个能完全按照要求工作。

下面是我的初始代码,它先升序,然后降序:

add_action( \'pre_get_posts\', \'my_views_orderby\' );
function my_views_orderby( $query ) {
    if( ! is_admin() )
        return;

    $orderby = $query->get( \'orderby\');

    if( \'view\' == $orderby ) {
        $query->set(\'meta_key\',\'views\');
        $query->set(\'orderby\',\'meta_value_num\');
    }
}
我最初的解决方案是添加排序顺序:

add_action( \'pre_get_posts\', \'my_views_orderby\' );
function my_views_orderby( $query ) {
    if( ! is_admin() )
        return;

    $orderby = $query->get( \'orderby\');

    if( \'view\' == $orderby ) {
        $query->set(\'meta_key\',\'views\');
        $query->set(\'orderby\',\'meta_value_num\');
        $query->set(\'order\',\'desc\');
    }
}
这是可行的,但它总是下降,因为我是这样设置的。

所以我把它设为有条件的:

add_action( \'pre_get_posts\', \'my_views_orderby\' );
function my_views_orderby( $query ) {
    if( ! is_admin() )
        return;

    $orderby = $query->get( \'orderby\');

    if( \'view\' == $orderby ) {
        $query->set(\'meta_key\',\'views\');
        $query->set(\'orderby\',\'meta_value_num\');
        $orderdir = $query->get( \'order\');
        if(\'desc\' == $orderdir) {
            $query->set(\'order\',\'asc\');
        } else {    
            $query->set(\'order\',\'desc\');
        }
    }
}
现在可以了,但排序指示器的方式是错误的。即当按升序排序时,图标指示降序,反之亦然。当我将鼠标悬停在排序列上时,图标指示当前状态,而不是它将变成的状态。此外,链接url(显示在chrome底部)告诉我它将按错误的方向排序。这意味着,如果我已经按视图降序排序,该链接指示它将按降序排序,并且v.v。

在off-chance中,它是相关的,这就是我如何将列声明为可排序的:

add_filter( \'manage_edit-post_sortable_columns\', \'my_sortable_view_column\' );
function my_sortable_view_column( $columns ) {
    $columns[\'post_views\'] = \'view\';
    return $columns;
}

1 个回复
SO网友:goodthoughts

而不是添加列标签"view" 作为string, 将其作为array 具有1 作为第二个值。像这样:array(\'view\',1)

完整代码:

add_filter( \'manage_edit-post_sortable_columns\', \'my_sortable_view_column\' );
function my_sortable_view_column( $columns ) {
    $columns[\'post_views\'] = array(\'view\',1);
    return $columns;
}
我没有WP Codex,但我发现其他人在这里发布了一个解决方案:http://www.weblogmechanic.com/2014/02/13/making-custom-column-wordpress-admin-sort-reverse-order/

结束