如果拒绝对用户进行管理员访问,则ADMIN_POST操作不可用

时间:2017-07-20 作者:TurtleTread

现在,具有特定角色的用户将被重定向到admin_init 取决于以下条件

if (is_admin() && in_array($role_id, $user->roles))
但是,这会阻止具有该角色的登录用户使用admin_post 行动挂钩。那么,有没有办法只重定向管理仪表板访问权限或功能?

我四处寻找处理WordPress表单提交的最佳选择,并阅读了admin_post 是要使用的钩子,但现在看来,如果角色在访问时被重定向,我现在无法使用它wp_admin/admin-post.php?

1 个回复
SO网友:hwl

那么(1)呢current_screen? 动作钩,或(2)的条件get_current_screen() 在您的条件中,然后调用wp_redirect?

都给你一个WP_Screen object 它有几个参数,包括$parent_base property 如果需要的话,这也可以提供更广泛的包容性。

以下是法典中的属性列表:

$action 与屏幕相关的任何操作。”为*“添加”-添加。php和*-新建。php屏幕。否则清空。

$base 屏幕的基本类型。这通常与$id相同,但删除了任何帖子类型和分类法。例如,对于$id为“edit post”的情况,基数为“edit”。

$id 屏幕的唯一ID。

$is_network 屏幕是否在网络管理中。

$is_user 屏幕是否在用户管理中。

$parent_base 基本菜单父菜单。这是通过删除查询字符串和any从$parent\\u文件派生的。php扩展$“编辑”的父文件值。php?post\\u type=页面“和”编辑。php?post\\u type=post“以$parent\\u为基数进行编辑”。

$parent_file 每个管理菜单系统屏幕的$parent\\u文件。某些$parent\\u文件值为“编辑”。php?post\\u type=页面\',\'编辑。“php”和“选项常规”。php’。

$post_type 与屏幕关联的帖子类型(如果有)。“编辑”。php?post\\u type=page“屏幕的帖子类型为page”。“编辑标签”。php?分类法=$分类法;post\\u type=page“屏幕的帖子类型为page”。

$taxonomy 与屏幕关联的分类法(如果有)。“编辑标签”。php?taxonomy=category”屏幕的分类为“category”。

这只是一个可能用法的简单示例,而不是按原样工作的代码:

add_action( \'current_screen\', \'my_function\' );

function my_function( $current_screen ) {
     //true for anything other than page prefixed with edit.php
     if ( $current_screen->parent_base !== \'edit\' ) { 
          //get user role here, then:
          if ( in_array( $user->roles ) ) {
             //send to /wp-admin/ 
            //note: for multisite I don\'t think admin_url() is the function you need
              wp_redirect( admin_url() ); 
          }
     }
 }
对于您的具体情况,可能有更好的方法,但一般来说,我使用了类似的打开/关闭访问post\\u类型或用户配置文件屏幕的方法,而不会影响用户登录的能力。

结束

相关推荐

如何301重定向到子目录但保持对主域wp-admin访问

我想将主域重定向到一个子目录,但要在主域的后端继续工作。我想编辑我的。htaccess文件。因此:实例com公司应重定向到301实例com/子目录但请以我的访问权限为例。com/wp管理并继续在后端工作,而不被重定向如何修复此问题?