我的设置
我有一个关于管理面板中用户过滤器过滤的问题。我添加了显示“registration\\u date”过滤器的代码,该过滤器工作正常。
I found this website to describe the process.
This part works fine.
现在,我正在尝试按最近注册的用户实现默认排序。在我的功能中。php,我尝试过这种方法which I\'ve found here. This part works partially only. 这是我的代码:
add_action(\'pre_get_users\', \'change_user_order\');
function change_user_order($query) {
$screen = get_current_screen();
if( is_admin() && \'users\' == $screen->base) {
if( !isset($query->query[\'orderby\']) ) {
$query->set(\'orderby\', \'registered\');
$query->set(\'order\', \'DESC\');
}
}
// We need to remember to return the altered query.
return $query;
}
默认情况下,此部分工作正常,因为过滤是由最新版本完成的。现在,它似乎还取消了对其他可排序列进行排序的所有其他可能性(例如asc登录)。例如,此url
wp-admin/users.php?orderby=login&order=asc
不会显示按登录名排序的用户字段。
What did I do wrong?
Update - Accepted solution & final code多亏了Sally,我才能够更改我的初始代码,从而满足了我的初始需求。
为完整起见,用户面板中此默认选择的可排序列和订单列的最终代码附在此处:
add_action(\'pre_get_users\', \'change_user_order\');
function change_user_order($query) {
$screen = get_current_screen();
if( is_admin() && \'users\' == $screen->base) {
// Set default `orderby` to \'registered\'.
if( empty( $_REQUEST[\'orderby\'] ) || !isset($query->query_vars[\'orderby\']) ) {
$query->set(\'orderby\', \'registered\');
}
// Set default `order` to \'DESC\'.
if( empty( $_REQUEST[\'order\'] ) || !isset($query->query_vars[\'order\']) ) {
$query->set(\'order\', \'DESC\');
}
}
// We need to remember to return the altered query.
return $query;
}
最合适的回答,由SO网友:Sally CJ 整理而成
首先,使用$query->query_vars
而不是$query->query
.
其次,您应该在重写相应的查询变量之前运行此条件检查:
empty( $_REQUEST[\'{VAR}\'] ) || !isset($query->query_vars[\'{VAR}\'])
在哪里
{VAR}
对应于查询变量的名称,例如
orderby
.
试试这个,对我来说很有用:
// Set default `orderby` to \'registered\'.
if( empty( $_REQUEST[\'orderby\'] ) || !isset($query->query_vars[\'orderby\']) ) {
$query->set(\'orderby\', \'registered\');
}
// Set default `order` to \'DESC\'.
if( empty( $_REQUEST[\'order\'] ) || !isset($query->query_vars[\'order\']) ) {
$query->set(\'order\', \'DESC\');
}
您将使用它来代替:
if( !isset($query->query[\'orderby\']) ) {
$query->set(\'orderby\', \'registered\');
$query->set(\'order\', \'DESC\');
}