如何正确创建多个条件以将用户角色重定向到不同的页面

时间:2018-02-11 作者:Kenny Amaro

基本上,我有两个用户角色可以访问我的网站,第一个是订阅者,第二个是客户,我希望他们满足某些条件:

如果其中任何一个未登录,请尝试访问店铺页面,他们将被重定向到注册页面如果有订阅者或客户登录,他们将尝试转到注册页面,如果有订阅者登录,但不是客户,请尝试访问店铺页面,他们将被重定向到“我的帐户”页面,他将被重定向到id确认页面(该页面包含订阅者需要填写和发送的表单,然后我们确认他的身份并将其角色更改为客户)

  • 如果有客户登录,他可以访问商店页面,而不是id确认页面
  • 未登录用户无法访问id确认页面,他们将被重定向到注册页面,我有以下代码,但它给了我一个问题,不知道为什么在进入店铺页面后将我的客户重定向到“我的帐户”页面:

    add_action( \'template_redirect\', \'subscribers_redirection\' );
    function subscribers_redirection() {
            if ( !is_user_logged_in() && !current_user_can( \'subscriber\' ) && !current_user_can( \'customer\' ) && ( is_shop() || is_product_category() || is_product_tag() || is_product() ) ) {
            wp_redirect( home_url( \'/register\' ) );
            } else if ( is_user_logged_in() && current_user_can( \'subscriber\' ) && !current_user_can( \'customer\' ) && ( is_shop() || is_product_category() || is_product_tag() || is_product() ) ){
            wp_redirect( home_url( \'/id-confirmation\' ) );
            } else if ( is_user_logged_in() && current_user_can( \'subscriber\' ) && current_user_can( \'customer\' ) && ( is_shop() || is_product_category() || is_product_tag() || is_product() ) ){
            wp_redirect( home_url( \'/shop\' ) );
            } else if ( is_user_logged_in() && is_page( \'Register\' ) ){
            wp_redirect( home_url( \'/my-account\' ) );
            } else if ( !current_user_can( \'subscriber\' ) && is_page( \'id-confirmation\' ) ){
            wp_redirect( home_url( \'/register\' ) );
            exit(); 
            }
    }
    

    My assumption:

    我认为出于某种原因,我的客户会首先被重定向到注册页面,但其中一个条件是,如果你是客户并且在注册页面上,你会被重定向到“我的帐户”页面,问题是为什么他们会在去商店后被重定向到先注册。

  • 1 个回复
    SO网友:Jory Hogeveen

    几张便条!

    如果您正在检查功能,则无需检查登录状态。访客(未登录)只有exists 能力,仅此而已。

    而且wp_redirect() 应始终后跟exit; 在大多数情况下。在您的示例中,只有最后一个后跟exit;. 否则可能会创建循环。

    我已经对您的代码进行了一些重构,我认为这应该可以:

    add_action( \'template_redirect\', \'subscribers_redirection\' );
    function subscribers_redirection() {
        $is_product_page = ( is_shop() || is_product_category() || is_product_tag() || is_product() );
        $is_logged_in    = is_user_logged_in();
        $is_subscriber   = current_user_can( \'subscriber\' );
        $is_customer     = current_user_can( \'customer\' );
    
        $redirect = false;
        if ( ! $is_logged_in && $is_product_page ) { // No need to check for user roles if the user isn\'t logged in.
            $redirect = home_url( \'/register\' );
        } else if ( $is_subscriber && ! $is_customer && $is_product_page ) {
            $redirect = home_url( \'/id-confirmation\' );
        } else if ( $is_customer && $is_product_page ) { // No need to check for a subscriber if the user already is a customer.
            $redirect = home_url( \'/shop\' );
        } else if ( $is_logged_in && is_page( \'register\' ) ) {
            $redirect = home_url( \'/my-account\' );
        } else if ( ! $is_subscriber && is_page( \'id-confirmation\' ) ) {
            $redirect = home_url( \'/register\' );
        }
    
        if ( $redirect ) {
            wp_redirect( $redirect );
            exit;
        }
    }
    

    结束

    相关推荐

    当在PHP/JavaScript中的Referrer不起作用时,如何处理导航中的倒退?

    所讨论的网站是:https://liquidchurch.com/messages/messages-app-view/单击此页面上的任何系列图像,您将进入该系列的页面:https://liquidchurch.com/messages/christmas-eve-series/messages-app-view/如果单击“返回”,很好,我们将返回到第一个链接。相反,我们将通过单击其中一个消息图像/链接进入单个消息,并在以下位置结束:https://liquidchurch.com/messages/ch