我们将如何限制除管理员以外的所有用户对WP管理员区域的访问?
我们网站上的用户拥有自己的个人资料页面,这些页面可以完成他们所需的所有功能。
因此,管理员应该对除管理员以外的所有用户都设置限制。
怎么做?
我们将如何限制除管理员以外的所有用户对WP管理员区域的访问?
我们网站上的用户拥有自己的个人资料页面,这些页面可以完成他们所需的所有功能。
因此,管理员应该对除管理员以外的所有用户都设置限制。
怎么做?
Answers:
我们可以admin_init
使用该current_user_can()
功能来查看用户是否是管理员,以查看当前用户是否可以manage_options
,这只能由管理员执行。
当非管理员尝试访问仪表板时,将此代码粘贴到functions.php文件中时将显示一条消息:
function wpse_11244_restrict_admin() {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
return;
}
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 );
如果您愿意,可以通过将用户重定向到主页来提供更好的用户体验:
function wpse_11244_restrict_admin() {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
return;
}
if ( ! current_user_can( 'manage_options' ) ) {
wp_redirect( home_url() );
exit;
}
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );
如果要将用户重定向到其个人资料页面,请home_url()
使用链接替换上面的代码。
manage_options
功能是检查管理员用户的公认方法。甚至Mark Jaquith都这么说
manage_options
是只有“管理员”才能做的事情,这是不正确的,它manage_options
是一种功能,可以从管理员角色中删除或分配给其他用户角色。重要的是要知道您想做什么并选择最佳方法。看到我的答案,我解释一下。
manage_options
为manage_network
。后者还将禁用默认“站点管理员”的仪表板,但保留对超级管理员(网络管理员)的访问权限。
您可以编写一个插件并插入admin_init
。
该抄本实际上提供了您要查找的功能的示例。
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#示例:_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();
}
}
试用Adminimize插件。
您可以用它很好地锁定事物。
您也可以尝试通过htaccess文件设置访问权限
function wpse_11244_restrict_admin() {
if (!current_user_can('update_core')) {
wp_die(__('You are not allowed to access this part of the site'));
}
}
add_action('admin_init', 'wpse_11244_restrict_admin', 1);
'administrator'
不是一种能力。它仅用于保持向后兼容性。检查'update_core'
或其他管理功能。
将这些行放在您的 functions.php
function baw_no_admin_access()
{
if( !current_user_can( 'administrator' ) ) {
wp_redirect( home_url() );
die();
}
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );
尝试此操作,决不要面对最终用户的错误。反对一个好的用户体验。此代码将它们重定向到Home。
add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}