几天来,我一直在努力让它正常工作,但最终还是得到了它,所以我想分享它,以便其他人也能从中受益。
在主题中创建一个名为user-list.php
使用Template Name.
<?php
/**
* Template Name: List Users
*/
现在,通过名为
user-list
并选择页面模板
List Users
.
现在已经分类了,让我们让它变得有趣。
首先,让我们确定current_user
允许检索此信息。为此,我们需要一些global
我们可以使用WordPress提供的变量。同时,我们还将设置前几个语句并调用一个不属于WordPress的函数。
(user-list.php)
/* Get user info. */
global $current_user, $wpdb;
get_currentuserinfo();
/* Load the user file. */
require_once( ABSPATH . WPINC . \'/user.php\' );
$error = array();
/* Check if user is super-admin or a customer */
/* Values stored in variables for later use to limit DB requests */
$super_admin = is_super_admin();
$editor = check_user_role( \'editor\' );
if( $super_admin || $editor ){
如上所示,我们正在为
current_user
(
info) 和
wpdb
(
info). 我们需要这些。另外,我们调用一个函数
check_user_role()
. 我找不到这个功用,我找到了。但将下面的函数添加到
functions.php
文件能够使用它,这是非常方便的。
(functions.php)
/**
* Checks if a particular user has a role.
* Returns true if a match was found.
*
* @param string $role - Role name.
* @param int $user_id - (Optional) The ID of a user. Defaults to the current user.
* @return bool - returns true/false
*/
function check_user_role( $role, $user_id = null ){
if( is_numeric( $user_id ))
$user = get_userdata( $user_id );
else
$user = wp_get_current_user();
if( empty( $user ))
return false;
return in_array( $role, (array)$user->roles );
}
现在我们可以检查一个用户
user_role
(信息
here 和
here).
如果请求此页面的用户通过if
声明,他要么super-admin
或editor
. 在本例中,我们假设应该允许编辑器这样做。
让我们继续我们的user-list.php
文件我们将使用$super_admin
和$editor
这里的变量,这就是为什么我们将它们创建为变量,而不是if
-陈述这样可以将一些查询保存到数据库中。接下来,我们需要设置要在查询中使用的变量,以便返回用户。显然,编辑器user\\u角色以后不应该看到所有相同的用户和/或拥有相同的数据选项。因此,我们先将其拆分,然后再查询数据。此外,超级管理员可以访问整个Multi-site, 作为一名编辑,这是不应该的。
我在代码中添加了注释,因为它实际上是第一部分。
(user-list.php continued)
/* Setup variables to use in query to get users */
$blog_id = \'\';
$roles = array();
/* Depending on logged in user, setup query vars differently */
if( $super_admin ){
$blog_id = \'*\';
$roles = array();
}
elseif( $editor ){
$blog_id = get_current_blog_id(); // In case of user on sub-domain
// Select which user_roles the logged in user is allowed to see
$user_roles = array( \'subscriber\', \'author\', \'contributor\' );
// If more than 1 add to array 1 at a time
if( $user_roles > 1 ){
$roles[ \'relation\' ] = \'OR\' ;
foreach( $user_roles as $role ){
$roles[] = array(
\'key\' => \'wp_capabilities\',
\'value\' => serialize(array($role=>true)), /* This value gets stored as: serialize(array(1){[$key]=>bool(true)) when it\'s created */
\'compare\' => \'=\'
);
}
} else {
/* NOTE!: set $user_roles NOT as an array if only 1 role!!! Just: $user_roles = \'contributor\'; */
$roles[] = array(
\'key\' => \'wp_capabilities\',
\'value\' => serialize(array($user_roles=>true)), /* This value gets stored as: serialize(array(1){[$key]=>bool(true)) when it\'s created */
\'compare\' => \'=\'
);
}
}
/* Use the setup variables to query users to display */
$args = array(
\'blog_id\' => $blog_id,
\'meta_query\' => $roles,
\'fields\' => \'all_with_meta\'
);
$all_users = new WP_User_Query( $args );
echo \'<pre>\';
print_r( $all_users );
echo \'</pre>\';
}
Source 对于
\'value\'
.
现在所有相关用户都存储在$all_users
你可以随意处理它们。希望有人会发现这很有用。