Некоторые из приведенных ответов могут быть хорошими в большинстве ситуаций, но я думаю, что ни один из них не гарантирует точного выполнения заданного, потому что ни один из ответов не проверяет роли пользователей, они проверяют возможности и возможности, которые можно назначать и удалять роли форм. Итак, чтобы дать точный ответ, необходимо проверить роли пользователя, а не возможности:
add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {
if( defined('DOING_AJAX') && DOING_AJAX ) {
//Allow ajax calls
return;
}
$user = wp_get_current_user();
if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
//Redirect to main page if no user or if the user has no "administrator" role assigned
wp_redirect( get_site_url( ) );
exit();
}
}
Если вы хотите проверить, что пользователь имеет возможность «manage_options», вы можете. На самом деле, это лучший вариант в большинстве случаев. Хотя эта возможность по умолчанию связана с пользователями-администраторами, ее можно удалить из роли администратора или назначить другим ролям пользователей. Вот почему в большинстве случаев проверка того, что пользователь может или не может сделать, лучше проверки роли пользователя. Таким образом, в большинстве случаев проверка возможностей должна быть выбрана способом, но вы должны прояснить эту концепцию и выбрать лучший вариант для вашей ситуации и цели:
add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {
if( defined('DOING_AJAX') && DOING_AJAX ) {
//Allow ajax calls
return;
}
if( ! current_user_can( "manage_options" ) ) {
//Redirect to main page if the user has no "manage_options" capability
wp_redirect( get_site_url( ) );
exit();
}
}