这不完全是你的错
负责生成用户列表的类不遵守
pre_user_query
滤器这意味着任何依赖于已修改(在pre\\u user\\u query中)WP\\u user\\u query对象的自定义列排序或筛选都将无法工作。你可以在下面的补丁中看到我的意思。
管理员用户列表表忽略筛选器
@@ -100,6 +100,7 @@ class WP_Users_List_Table extends WP_List_Table {
// Query the user IDs for this page
$wp_user_search = new WP_User_Query( $args );
+ $wp_user_search = apply_filters( \'pre_user_query\', $wp_user_search );
$this->items = $wp_user_search->get_results();
我认为这是一个bug或至少是一个疏忽,但我不能确定作者的意图是什么。也许值得向github上的WP人员提及这一点(我没有就此开罚单)。
WP\\u User\\u Query似乎是不可变的
此外,WP\\u User\\u Query->set()和WP\\u User\\u Query->prepare\\u Query()方法并没有达到我所期望的效果。这可能与您的情况有关,也可能与您的情况无关。如果遇到任何问题(即忽略设置),只需在过滤器中创建一个新对象并返回该对象即可。
function pre_user_query( $wp_user_query ) {
if ( isset( $wp_user_query->query_vars[\'orderby\'] ) and
$wp_user_query->query_vars[\'orderby\'] === \'custom-column-slug\') {
$order = strtoupper( $_GET[\'order\'] );
if ( !in_array( $order , array(\'ASC\', \'DESC\') ))
$order = \'DESC\';
$wp_user_query = new WP_User_Query( array(
\'fields\' => \'all_with_meta\',
\'orderby\' => \'meta_value\',
\'order\' => $order ,
\'meta_query\' => array(
0 => array(
\'key\' => \'custom-column-slug\',
\'compare\' => \'NOT EXISTS\',
),
\'relation\' => \'OR\',
1 => array(
\'key\' => \'custom-column-slug\',
\'compare\' => \'IN\',
\'value\' => [\'zumba\', \'swing\', \'jazz\'],
),
),
));
}
return $wp_user_query;
}