問題描述
除了管理員,我們如何限制對所有使用者的 WP 管理區域的訪問?我們網站上的使用者擁有自己的個人資料頁面,可以執行所需的所有功能。
所以管理員應該對所有除管理員以外的所有許可權進行限制。
怎麼做?
最佳解決方案
我們可以鉤住 admin_init 操作,並透過使用 current_user_can()功能檢視使用者是否是管理員,以檢視當前使用者是否可以使用 manage_options,這只是管理員可以做的。
當程式碼貼上到您的 functions.php 檔案中時,當 non-admin 嘗試訪問儀表盤時,該程式碼將顯示一條訊息:
function wpse_11244_restrict_admin() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __('You are not allowed to access this part of the site') );
}
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );
如果您願意,您可以透過將使用者重定向到主頁來提供更好的使用者體驗 ($_SERVER['PHP_SELF']檢查是為了確保我們不會在 AJAX 請求上重定向):
function wpse_11244_restrict_admin() {
if ( ! current_user_can( 'manage_options' ) && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
wp_redirect( home_url() );
}
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );
如果要將使用者重定向到其個人資料頁面,請使用上面的程式碼替換 home_url()。
次佳解決方案
您可以編寫一個外掛並鉤入 admin_init 。
抄本實際上提供了您正在尋找的功能的示例。
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control
第三種解決方案
給出的一些答案在大多數情況下可以很好,但我認為沒有一個保證完全正確的問題,因為沒有一個答案檢查使用者角色,他們檢查功能和功能可以分配和刪除表單角色。所以,要給出一個確切的答案,使用者角色必須檢查,而不是功能:
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();
}
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。