我在帖子的管理区域创建了许多“视图”栏。这方面有几个教程,事实上我确实使用了其中的一些来获得最终结果。
它按预期工作,但我希望初始排序顺序是数字降序,但不幸的是,当您第一次选择它时,它总是升序。再次单击它将显示一个降序列表。我希望它在第一次选中时最初是降序的,然后如果你想升序(这不太可能),我会再次单击它。
我已经尝试了很多解决方案(都是我自己的设备),但没有一个能完全按照要求工作。
下面是我的初始代码,它先升序,然后降序:
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;
}