Một số câu trả lời được đưa ra có thể tốt trong hầu hết các tình huống nhưng tôi nghĩ không ai trong số họ bảo đảm thực hiện chính xác những gì được hỏi vì không có câu trả lời nào kiểm tra vai trò của người dùng, họ kiểm tra khả năng và khả năng có thể được gán và loại bỏ vai trò của biểu mẫu. Vì vậy, để đưa ra câu trả lời chính xác, phải kiểm tra vai trò của người dùng, không phải khả năng:
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();
}
}
Nếu bạn muốn kiểm tra xem người dùng có khả năng "Manage_options" hay không, bạn có thể. Trong thực tế, nó là lựa chọn tốt nhất trong hầu hết các trường hợp. Mặc dù khả năng này được liên kết theo mặc định cho người dùng quản trị viên, khả năng này có thể bị xóa khỏi vai trò quản trị viên hoặc nó có thể được gán cho các vai trò người dùng khác. Đó là lý do tại sao, trong hầu hết các trường hợp, kiểm tra những gì người dùng có thể hoặc không thể làm tốt hơn là kiểm tra vai trò của người dùng. Vì vậy, trong hầu hết các trường hợp, việc kiểm tra các khả năng nên là cách được chọn nhưng bạn không hiểu rõ khái niệm này và chọn tùy chọn tốt nhất cho tình huống và mục đích của bạn:
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();
}
}