通过USER_ROLE和CURRENT_USER角色从所有/特定博客获取用户

时间:2014-06-05 作者:rkeet

我需要并且认为可能有相当多的人也需要的是:根据他们希望看到的帐户的user\\u角色,从所有或特定博客中获取用户,同时区分来自超级管理员或博客管理员的请求。

你是怎么做的?

1 个回复
最合适的回答,由SO网友:rkeet 整理而成

几天来,我一直在努力让它正常工作,但最终还是得到了它,所以我想分享它,以便其他人也能从中受益。

在主题中创建一个名为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 (信息herehere).

如果请求此页面的用户通过if 声明,他要么super-admineditor. 在本例中,我们假设应该允许编辑器这样做。

让我们继续我们的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 你可以随意处理它们。希望有人会发现这很有用。

结束

相关推荐

404 on page 2 multisite

我有一个多站点安装的wordpress。在我的起始页(index.php)上,我显示了来自该网络所有站点的帖子。我遇到的问题是,当我转到/Page/2时,如果我的主博客没有足够的帖子放在第2页上,我会收到404条消息。然而,在整个网络上,有足够的帖子可以容纳2页。如果我在我的主博客中添加更多帖子,第2页将再次可用。我猜wordpress会在查询包含索引之前检查是否存在任何帖子。php。我试图找到在哪里可以做到这一点,但没有找到任何东西。有人知道wordpress在索引之前是否做过这种检查吗。是否包含php