2015-11-19 3 views
0

Я создаю пользовательский контент, используя поле ACF User, чтобы определить, какой пользователь может видеть что. Мой код ниже работает отлично, чтобы показать правильное содержание к выбранному пользователю и что-то другое для всех остальных -Если пользователь является конкретным пользователем OR и администратором

<?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() { 

Вся помощь очень ценная.

+0

Эй, Скотт, посмотрите мой ответ ниже. Я уверен, что 'is_admin()' не является той функцией, которую вы ищете. –

+1

Hi Nikola, вы правы is_admin() не был подходящим вариантом для меня, но ответ действительно, поскольку это было утверждение «или», с которым у меня были проблемы. Спасибо, хотя для вашего подробного ответа ниже. –

ответ

0

Ваши скобки ошибочны, и все.

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

Это предполагает функцию is_admin() работает, хотя :)

+0

Спасибо. Я знал, что это что-то глупое, и подумал, что я пробовал это ... Очевидно, нет! Он работает отлично. Еще раз спасибо. –

0

Хотя ответ христианина исправляет опечатку в этом вопросе, он не обеспечивает работающее решение.

The documentation for is_admin() утверждает следующее:

Эта условная проверка тегов, если Приборная панель или панель администрирования пытается отображаться. Он должен не использовать как средство для проверки того, имеет ли текущий пользователь разрешение на просмотр панели управления или панели администрирования (вместо этого попробуйте current_user_can()). Это логическая функция, которая вернет true, если доступ к URL-адресу находится в разделе администратора или false для интерфейсной страницы.

И далее вниз в разделе Примечания:

is_admin() является не предназначен для использования для проверки безопасности. Он будет вернуть true, если текущий URL-адрес предназначен для страницы на стороне администратора WordPress. Он не проверяет, вошел ли пользователь в систему, и если пользователь даже имеет доступ к запрашиваемой странице. Удобство функция для плагинов и тем для использования для различных целей, но это не подходит для проверки защищенных запросов.

Я понимаю логику, которая может заставить думать, что is_admin() проверяет, является ли текущий пользователь администратором. Тем не менее, проверка документации WordPress (и я должен сказать, что это действительно хорошо для часто используемых функций) - это всегда хорошая идея.


Теперь, когда мы получили, что из пути, есть два простых варианта, которые вы можете использовать для того, чтобы выяснить, если текущий пользователь имеет привилегии администратора:

1. Если вы «не собираетесь использовать WordPress MultiSite, или если вы хотите, чтобы только суперадминистраторы видеть содержание

is_super_admin():

Определите, является ли пользователь администратором сети (супер).Также проверяет, является ли пользователь администратором, если сетевой режим отключен.

Вы можете передать идентификатор данного пользователя к функции, или в вашем случае просто сделать это:

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

2. Если вы собираетесь использовать WordPress MultiSite и вас будет хотеть, чтобы супер администраторы и администраторы сайта могли видеть контент

Мы можем создать свою собственную функцию, которая очень похожа на is_super_admin(), за исключением многоуровневой среды, а также chec ks, если текущий пользователь является администратором (в функции 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 - если вы решите пойти именно так.

Смежные вопросы