问题描述

除了管理员,我们如何限制对所有用户的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。