wordpress 将用户重定向到相同的 URL 他们请求根据角色附加参数

wordpress redirect users to the same URL they request appending parameters according to role

我在 Wordpress 网站上工作,担任多个角色。我的目标是重定向具有特定角色的用户,当他们请求管理区域中的订单之类的页面以转到具有其 ID 的已过滤 URL 时。

示例:用户请求:www.site.com/wp-admin/edit.php?post_type=shop_order

     User redirects to: www.site.com/wp-admin/edit.php?post_type=shop_order&wcb2bsa_sales_agent_search={current user id}

这仅适用于角色“测试员”

我的方法是:

add_filter( 'user_has_cap', 'only_let_user_see', 10, 3 );
function only_let_user_see( $allcaps, $cap, $args ) {  
if($args[0] === 'edit_posts' && is_admin()) {
$url = "https://";
$url.= $_SERVER['HTTP_HOST'];
$url.= $_SERVER['REQUEST_URI'];
$url.= 'wcb2bsa_sales_agent_search='; 
$url.= '100'; //fixed number for test purpose
} 
if(current_user_can('tester')) { 
wp_redirect ($url); 
exit; 
}else
{ return $allcaps;}}   

重写代码现在给了我错误,虽然当我测试它时它只是工作但问题是用户收到错误:重定向太多。

我真的需要这方面的帮助,所以任何建议都将不胜感激。提前致谢。

问题在于 user_has_cap 过滤器,其中需要用户能力 return。在您的代码中,您在不传递功能的情况下重定向 tester 用户,因此您应该使用 admin_init 操作来重定向用户。

function redirect_users_by_role() {
    global $pagenow;
    if ($pagenow == 'edit.php' && $_REQUEST['post_type'] == 'shop_order' && current_user_can('shop_manager')) {
        $url = "https://";
        $url.= $_SERVER['HTTP_HOST'];
        $url.= $_SERVER['REQUEST_URI'];
        $url.= '&wcb2bsa_sales_agent_search='; 
        $url.= '100'; //fixed number for test purpose
        wp_redirect ($url); 
        exit;
    } 
}
add_action( 'admin_init', 'redirect_users_by_role' );

以上代码已经过测试,运行良好!