Проверьте, является ли пользователь администратором по имени пользователя или только по электронной почте

Я создаю раздел администратора с нуля. Пользователями для этого должны быть пользователи с сайта wordpress, где у них есть права администратора. Поэтому я в настоящее время проверяю пользователей на использование

if( (!user_pass_ok($user, $pass)){ //login fail }else{ //successful login } 

Но я также хочу знать, является ли пользователь администратором. Что я натолкнулся на поиск в Интернете, они используют current_user_can( 'administrator' ) . Но в моем случае пользователь еще не выполнил вход. Все, что я должен проверить, является ли пользователь администратором, – это имя пользователя / адрес электронной почты, который пользователь вводит для входа. Как я могу проверить, является ли этот пользователь администратором только имя пользователя / адрес электронной почты?

Как я заметил в комментарии user_pass_ok( $user, $pass ) устарел в пользу wp_authenticate .

Кроме того, у WordPress есть удивительный API возможностей, который выходит далеко за пределы Роли. Я бы настоятельно рекомендовал прочитать об этом.

Для краткого примера, если бы я хотел предоставить пользователю доступ для управления параметрами WordPress ( manage_options , называемая manage_options которая унаследована от роли администратора), все, что мне нужно сделать, это сказать current_user_can('manage_options') или использовать WP_User->has_cap(...) .

Согласование на основе возможностей, как правило, гораздо более гибкое, чем сопоставление на роли … например, представьте, что мой сайт занял вторую роль под названием «Разработчики». Если вы включили доступ на основе ролей и хотите предоставить пользователям в роли разработчика доступ к вашей функции, вам нужно будет добавить вторую проверку, когда вам нужно проверить права пользователей: ($role == 'administrator' || $role == 'developer')

Итак, если у вас уже зарегистрирован пользователь, вы всегда можете проверить свои возможности с помощью:

 current_user_can( 'manage_options' ) // all admins have 'manage_options' 

или определите свой собственный пользовательский кеп, дайте его всем администраторам:

 function add_custom_admin_caps() { $role = get_role( 'administrator' ); $role->add_cap( 'access_my_admin_zone' ); } add_action( 'admin_init', 'add_custom_admin_caps'); 

и проверить пользовательскую кепку против текущего пользователя

 current_user_can( 'access_my_admin_zone' ) 

Дополнительным преимуществом для возможностей является то, что WordPress автоматически проверяет разрешения текущего пользователя при рендеринге меню WP Admin, если вы зарегистрируете свой раздел администратора с помощью одной из функций _ _ _ add_menu_page ( ) и функцией, подобной «manage_options»,

 add_menu_page ( $title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position) 

Наконец, было немного неясно, были ли вы сами входить в систему, если бы я предложил эту альтернативу, если вы входите в систему с нуля (т. Е. Не используете форму входа в WordPress):

 $user = wp_authenticate( $user, $pass ); if ( is_a( $user, 'WP_User' ) && $user->has_cap( 'manage_options' ) ) { // success } else { // fail } 

Вам также нужно будет вызвать current_user_can( 'manage_options' ) во время каждой загрузки страницы вашего настраиваемого администратора, чтобы убедиться, что пользователь вошел в систему и имеет разрешения, если это не удается, затем направьте их на свою пользовательскую страницу входа … или, возможно, страницу входа в WordPress с помощью auth_redirect () .

 $user = get_userdata( $user_id ); if ( in_array( 'administrator', (array) $user->roles ) ) { //User has administrator privilidges }