如果用户是特定用户或管理员

时间:2015-11-19 16:38:42

标签: php wordpress variables conditional admin

我正在使用ACF用户字段创建用户特定内容,以确定哪个用户可以看到什么。我的下面的代码完美地向所选用户显示正确的内容以及与其他人不同的内容 -

<?php
  $client = get_field('client');        
  $userID = $client['ID'];
  $user_id = get_current_user_id();

  if ($user_id == $userID ) {
     echo 'YOUR OWN PAGE';
   } else {
     echo 'NOT YOUR PAGE';
   }
?>  

但是我需要简单地添加一个'或'语句,这样任何管理员用户都可以看到所有内容,无论他们是谁,如下所示(这不起作用) -

if ($user_id == $userID ) || is_admin() {

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

你的括号是错误的。

if ($user_id == $userID || is_admin() ) {

这假设is_admin()函数有效:)

答案 1 :(得分:0)

虽然克里斯蒂安的答案解决了问题中的拼写错误,但它并没有提供可行的解决方案。

The documentation for is_admin()声明如下:

  

此条件标记检查是否正在尝试显示控制板或管理面板。 不应用作验证当前用户是否有权查看仪表板或管理面板的方法(请尝试使用current_user_can())。这是一个布尔函数,如果访问的URL在admin部分,则返回true,对于前端页面,则返回false。

在笔记部分进一步说明:

  

is_admin()旨在用于安全检查。它会   只要当前URL用于管理端的页面,就返回true   WordPress的。它不会检查用户是否已登录,也不会检查   用户甚至可以访问所请求的页面。这是一个方便   用于各种目的的插件和主题的功能,但确实如此   不适合验证安全请求。

我确实理解可能导致人们认为is_admin()检查当前用户是否是管理员的逻辑。但是,使用WordPress文档进行检查(我必须说它对常用功能非常有用)总是一个好主意。

现在我们已经解决了这个问题,您可以使用两个简单的选项来确定当前用户是否具有管理员权限:

<强> 1。如果您不打算使用WordPress Multisite,或者您只想让超级管理员看到内容

is_super_admin()

  

确定用户是否是网络(超级)管理员。如果禁用网络模式,还将检查用户是否为admin。

您可以将给定用户的ID传递给该函数,或者在您的情况下执行此操作:

if ( $user_id == $userID || is_super_admin() ) {

<强> 2。如果您要使用WordPress Multisite ,则需要允许超级管理员和网站管理员查看内容

我们可以创建自己的函数,它与is_super_admin()非常相似,除了在Multisite环境中它还检查当前用户是否是管理员(在is_super_admin()函数中,这是由具有delete_users能力的用户)。这是代码:

function my_is_user_admin( $user_id = false ) {
    if ( ! $user_id || $user_id == get_current_user_id() ) {
        $user = wp_get_current_user();
    } else {
        $user = get_userdata( $user_id );
    }

    if ( ! $user || ! $user->exists() ) {
        return false;
    }

    if ( is_multisite() ) {
        $super_admins = get_super_admins();
        if ( ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins ) ) || $user->has_cap( 'delete_users' ) ) {
            return true;
        }
    } else {
        if ( $user->has_cap( 'delete_users' ) ) {
            return true;
        }
    }

    return false;
}

还有一种替代解决方案,可以更加扩展 - 您可以创建自己的功能并将其分配给管理员角色。这样,如果由于某种原因我想让某人访问所有内容,但又不想让他们成为我网站上的管理员,我可以将该特定功能添加到该特定用户(无法找到目前是一个免费的插件,但有办法做到这一点。)

这个问题对于如何添加自定义功能有正确的答案 - https://wordpress.stackexchange.com/questions/35165/how-do-i-create-a-custom-role-capability - 如果您选择这样做。