WordPress多站点Network Admin用户面板添加筛选选项技术求助
给WordPress多站点网络管理用户面板添加自定义筛选选项
步骤1:添加筛选下拉菜单到用户列表顶部
通过restrict_manage_users钩子,在网络用户管理页面的筛选栏插入自定义下拉选项:
add_action('restrict_manage_users', 'add_custom_network_user_filter'); function add_custom_network_user_filter() { // 仅在网络管理员的用户列表页面显示 if ( ! is_network_admin() || get_current_screen()->id !== 'users-network' ) { return; } // 获取当前选中的筛选值,保留刷新后的状态 $selected_filter = isset($_GET['custom_user_filter']) ? sanitize_text_field($_GET['custom_user_filter']) : ''; ?> <select name="custom_user_filter" id="custom-user-filter" class="wp-filter-select"> <option value="" <?php selected($selected_filter, ''); ?>>所有用户</option> <option value="super_admin" <?php selected($selected_filter, 'super_admin'); ?>>超级管理员</option> <option value="site_admin" <?php selected($selected_filter, 'site_admin'); ?>>站点管理员</option> </select> <?php }
步骤2:实现筛选逻辑,修改用户查询
使用pre_get_users钩子拦截用户查询,根据选中的条件过滤结果:
add_action('pre_get_users', 'filter_network_users_by_custom_param'); function filter_network_users_by_custom_param($user_query) { global $pagenow; // 仅在网络用户管理页面生效 if ( ! is_network_admin() || $pagenow !== 'users.php' || ! isset($_GET['custom_user_filter']) || empty($_GET['custom_user_filter']) ) { return; } $filter_value = sanitize_text_field($_GET['custom_user_filter']); if ($filter_value === 'super_admin') { // 筛选拥有超级管理员权限的用户 $user_query->set('meta_key', 'wp_capabilities'); $user_query->set('meta_value', serialize(array('super_admin' => true))); $user_query->set('meta_compare', 'LIKE'); } elseif ($filter_value === 'site_admin') { // 筛选至少是一个站点管理员的用户 global $wpdb; $site_admin_user_ids = $wpdb->get_col( "SELECT DISTINCT user_id FROM $wpdb->usermeta WHERE meta_key LIKE '{$wpdb->prefix}%_capabilities' AND meta_value LIKE '%\"administrator\"%'" ); $user_query->set('include', $site_admin_user_ids); } }
使用说明
- 把代码添加到主题的
functions.php文件,或者创建独立的自定义插件存放(推荐后者,避免主题更新丢失代码)。 - 示例提供了「超级管理员」「站点管理员」两个筛选选项,你可以根据需求修改选项内容和筛选逻辑,比如按用户注册时间、自定义用户字段等。
内容的提问来源于stack exchange,提问作者user3868334
相关产品推荐
相关产品推荐

