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

If user is a specific user OR and 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';
   }
?>  

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

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

非常感谢所有帮助。

你的括号是错误的。

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

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

虽然 Christian 的回答修复了问题中的拼写错误,但它没有提供有效的解决方案。

The documentation for is_admin() 声明如下:

This Conditional Tag checks if the Dashboard or the administration panel is attempting to be displayed. It should not be used as a means to verify whether the current user has permission to view the Dashboard or the administration panel (try current_user_can() instead). This is a boolean function that will return true if the URL being accessed is in the admin section, or false for a front-end page.

在注释部分的更下方:

is_admin() is not intended to be used for security checks. It will return true whenever the current URL is for a page on the admin side of WordPress. It does not check if the user is logged in, nor if the user even has access to the page being requested. It is a convenience function for plugins and themes to use for various purposes, but it is not suitable for validating secured requests.

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


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

1.如果您不打算使用 WordPress Multisite,或者如果您只想允许超级管理员查看内容

is_super_admin():

Determine if user is a network (super) admin. Will also check if user is admin if network mode is disabled.

您可以将给定用户的 ID 传递给该函数,或者在您的情况下只需这样做:

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

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

我们可以创建自己的函数,其工作方式与 is_super_admin() 非常相似,除了在多站点环境中它还会检查当前用户是否为管理员(在 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 - 如果你选择这样做的话。