Деякі з наведених відповідей можуть бути прекрасними в більшості ситуацій, але я думаю, що жоден з них не гарантує виконання саме того, що задається, оскільки жодна з відповідей не перевіряє ролі користувачів, вони перевіряють можливості та можливості, можуть бути призначені та видалені з ролей форми. Отже, щоб дати точну відповідь, потрібно перевірити ролі користувача, а не можливості:
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();
}
}
Якщо ви хочете перевірити, чи є у користувача можливість "керувати_операціями", ви можете. Насправді це найкращий варіант у більшості випадків. Хоча ця можливість за замовчуванням пов’язана з адміністраторами, вона може бути видалена з ролі адміністратора або ж вона може бути призначена іншим ролям користувача. Ось чому в більшості випадків перевірка того, що користувач може чи не може зробити, краще, ніж перевірка ролі користувача. Отже, у більшості випадків перевірка можливостей повинна бути обраним способом, але ви маєте зрозуміти цю концепцію та вибрати найкращий варіант для вашої ситуації та мети:
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();
}
}