WooCommerce - 根据角色重定向登录用户

WooCommerce - Redirect Logged In Users Based on their Role

这是一个基于 WooCommerce 会员资格和订阅的查询。

我必须补充一点,我也在尝试确定我正在做的事情是否是好的用户体验。

有很多解决方案可以在用户登录后重定向他们,但我有一种情况,当用户单击指向描述并允许您的页面的特定链接时,我想重定向具有 'subscriber' 角色的用户成为会员。因此,虽然我不想隐藏 'join now' 等,但我只想将它们重定向到我的帐户页面。

同样有各种角色和重定向插件,但 none 似乎在这种特定情况下有所帮助。所以我使用的代码源在这里:SOURCE 我想做这样的事情:

function eks_redirect_users_by_role() {

    global $post;
    $current_user   = wp_get_current_user();
    $role_name      = $current_user->roles[0];


    if ( 'subscriber' === $role_name && $post->ID == 47145)  {
        wp_redirect( '/my-account' );
    } 

} 

add_action( 'admin_init', 'eks_redirect_users_by_role' );

因此,如果用户角色是订户,并且他们尝试访问该页面的想法,它就会被重定向。

目前,它确实返回到一个产品页面,上面写着'you already have a membership',但要经过多个步骤才能到达。

我能够通过以下方式实现我想要的:

function eks_redirect_user() {

    $current_user   = wp_get_current_user();
    $role_name      = $current_user->roles[0];
    $postid = get_the_ID();

    if ( 'subscriber' === $role_name && $postid == 47145  ) { ?>
        <script>
function redirectPage() {

    window.location = "/my-account/";
}

redirectPage();
</script>

<?php
        exit;
    }

}
add_action('wp_footer', 'eks_redirect_user' );

问题是它是一个相当不整洁的解决方案,因为重定向感觉很奇怪。我不确定使用 wp_redirect 是否会更好。我决定只禁用包含主要会员信息的页面上的按钮,而不是将每个号召性用语重定向到帐户页面,这似乎是一个更优雅的解决方案。

这可能是实现您的要求的更有用和正确的方法。

function redirection_based_user_role(){

    $current_user   = wp_get_current_user();
    $role_name      = $current_user->roles[0];
    $postid         = get_the_ID();

    if ( 'subscriber' === $role_name && $postid == 47145  ) {
        wp_redirect( home_url( '/my-account' ), 301 );
        exit;
    }
}
add_action( 'template_redirect', 'redirection_based_user_role' );

希望这有效。