Как я могу проверить, является ли текущий вошедший в систему пользователь администратором или редактором?
Я знаю, как сделать каждый в отдельности:
<?php if(current_user_can('editor')) { ?>
<!-- Stuff here for editors -->
<?php } ?>
<?php if(current_user_can('administrator')) { ?>
<!-- Stuff here for administrators -->
<?php } ?>
Но как мне работать вместе? Т.е. пользователь это администратор или редактор?
users
user-roles
Энди
источник
источник
if( current_user_can('editor') || current_user_can('administrator') )
Ответы:
Первый ответ, не связанный с WordPress, потому что это всего лишь PHP: используйте логический оператор «ИЛИ»:
Если вы хотите проверить более двух ролей, вы можете проверить, находятся ли роли текущего пользователя в массиве ролей, например:
Однако
current_user_can
может использоваться не только с именем пользователя, но и с его возможностями.Таким образом, как только редакторы, так и администраторы могут редактировать страницы, ваша жизнь может быть проще, проверяя эти возможности:
Посмотрите здесь для получения дополнительной информации о возможностях.
источник
is_logged_in();
?current_user_can()
всегда возвращает false, если пользователь не вошел в систему, иwp_get_current_user()
вернет пользователя без какой-либо роли, если пользователь не вошел в систему, поэтомуarray_intersect()
всегда будет false.current_user_can()
функции мы можем видеть строку « Хотя проверка по отдельным ролям вместо возможности поддерживается частично, такая практика не рекомендуется, поскольку она может привести к ненадежным результатам ». Поэтому я думаю, что было бы лучше избегать использования ролей при проверке возможностей пользователя :-)array_intersect
метод, я получаю предупреждение PHP в нашем журнале ошибок сервера, говорящееarray_intersect(): Argument #2 is not an array
. Это потому, что проверяемые пользователи имеют только одну роль?array_intersect($allowed_roles, (array)$user->roles )
будет работать без проблем.Во-первых,
current_user_can()
не следует использовать для проверки роли пользователя - его следует использовать для проверки наличия у пользователя определенных возможностей .Во-вторых, вместо того, чтобы интересоваться ролью пользователя, но вместо этого сосредоточиться на возможностях, вам не нужно заниматься такими вещами, как проблема, о которой говорилось в первоначальном вопросе (который проверяет, является ли пользователь администратором или редактором). Вместо этого, если
current_user_can()
он используется по назначению, то есть для проверки возможностей пользователя, а не его роли, вам не понадобится условная проверка, содержащая тест «или» (||). Например:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages - это возможность как администратора, так и редактора, но не нижестоящих ролей, таких как авторы. Вот как это
current_user_can()
было предназначено для использования.источник
current_user_can
обычно следует использовать для возможностей, а не для ролей.Как говорится в ответе @butlerblog, вы не должны использовать current_user_can для проверки роли
Это уведомление специально добавлено в документацию PHP о
has_cap
функции, которая вызываетсяcurrent_user_can
ПРАВИЛЬНЫЙ способ сделать это , чтобы заставить пользователя и проверить
$user->roles
, как это:Вот некоторые вспомогательные функции, которые я использую для этого (так как иногда я не хочу только текущего пользователя):
Тогда вы можете просто сделать это:
current_user_has_role( 'editor' );
или же
current_user_has_role( array( 'editor', 'administrator' ) );
источник
источник