在特定页面上重定向用户角色

时间:2021-03-17 作者:Alex M

我正在尝试将用户角色重定向到特定页面。如果他们的角色是contributor 正在尝试访问Users Admin Page 它们应该被重定向。不确定我是否正确操作,因为它不起作用。请帮忙

function mwd_redirect_if_on_page() {
   $mwd_current_user = wp_get_current_user();
   if ( user_can( $mwd_current_user, \'contributor\')  && is_page(\'wp-admin/users.php\') ) {
      return home_url(\'specific-page\');
   }
}
add_filter( \'login_redirect\', \'mwd_redirect_if_on_page\' );

2 个回复
SO网友:Sabbir Hasan

您可以通过以下方式实现目标:

// Block Access to /wp-admin
function mwd_redirect_if_on_page() {
  if ( is_user_logged_in() && is_admin() && current_user_can( \'contributor\' ) && (defined( \'DOING_AJAX\' ) && !DOING_AJAX) ) ) {
    wp_redirect( home_url(\'specific-page\') );
    exit;
  }
}
add_action( \'init\', \'mwd_redirect_if_on_page\' );
如果您仔细看,我已经添加了ajax检查。这样,参与者将无法访问wp-admin 但如果有其他ajax请求,仍然可以访问。

SO网友:Sally CJ

那个is_page(\'wp-admin/users.php\') 不起作用,因为is_page() 是针对page 仅键入,函数使用mainWP_Query 调用(在页面加载时运行),但在users.php

但你可以使用全球$pagenow 用于检查当前管理页是否为users.php.

下面是一个使用admin_init hook:

add_action( \'admin_init\', \'wpse_385245_1\' );
function wpse_385245_1() {
    global $pagenow;
    if ( \'users.php\' === $pagenow &&
        in_array( \'contributor\', wp_get_current_user()->roles ) ) {
        wp_redirect( home_url( \'specific-page\' ) );
        exit;
    }
}
或者您可以使用load-users.php hook 在加载users.php 页,因此您不再需要检查$pagenow 值:

add_action( \'load-users.php\', \'wpse_385245_2\' );
function wpse_385245_2() {
    if ( in_array( \'contributor\', wp_get_current_user()->roles ) ) {
        wp_redirect( home_url( \'specific-page\' ) );
        exit;
    }
}
但是,该钩子仅在admin_init 和其他挂钩,所以如果您不想;“等待”;要完成这些额外的挂钩,只需使用admin_init.

Notes:

  • $pagenow 是仅管理端的全局变量。

    我没有使用current_user_can( \'contributor\' ) 因为documentation 说:“我不知道。”虽然部分支持针对特定角色而不是功能进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果“引用”;。这也适用于user_can() 作用

相关推荐

Functions.php上未定义$_GET和&_REQUEST索引

我最近尝试学习为我的自定义主题创建一个主题选项页面,这是按照stackoverflow和其他资源的教程进行的。但脚本显示错误if ($_GET[\'page\'] == basename(__FILE__)) { if (\'save\' == $_REQUEST[\'formaction\']) { foreach ($options as $value) { if( isset( $_REQUEST[ $value[\'id\']