簡體   English   中英

WordPress:如果用戶角色是“旅行代理”,則重定向到“我的帳戶”

[英]Wordpress: If user role is 'travel agent' redirect to 'my-account'

我使用add_role( 'travel_agent', 'Travel Agent', array( 'book_hotel' ) );創建了一個自定義角色“ Travel Agent” add_role( 'travel_agent', 'Travel Agent', array( 'book_hotel' ) ); 在我的主題functions.php

但是,我不希望該用戶訪問儀表板,因此我想在登錄后將其重定向到“我的帳戶”。

我在wp-login.php / functions.php上使用此代碼,沒有任何運氣:

function redirect_agents() {
  if ( current_user_can('book_hotel') ){
      return '/my-account';
  }
}

add_filter('login_redirect', 'redirect_agents');

但是,我不會被重定向。。但是,如果我在功能.php中使用不帶If的代碼,如下所示:

 function redirect_agents() {
          return '/my-account';
    }

add_filter('login_redirect', 'redirect_agents');

它可以工作,但是所有用戶都將重定向到我的帳戶。 任何幫助是極大的贊賞!

為什么不使用WordPress全局$ current_user。

if(in_array('travel_agent', $current_user->roles)) {
  return '/my-account';
}

login_redirect過濾器接受三個參數: redirect_to (包含當前重定向值), request (用戶來自的URL)和user (作為WP_User對象登錄的用戶)。

您可以在函數內使用user參數來確定是否重定向:

add_filter( "login_redirect", "custom_login_redirect", 10, 3 );

function custom_login_redirect( $redirect_to, $request, $user )
{
    if ( in_array( "role_name", $user -> roles ) )
    {
        return "/hello-world";
    }

    // Remember to return something just in case,
    // as filters can possibly block execution if
    // they do not return anything.
    else
    {
        return $redirect_to;
    }
}

您可能還需要驗證$user是正確的WP_User對象,以確保正確執行。

您可以嘗試使用$ current_user全局變量,但是在執行login_redirect時可能會或可能不會定義它。

有關更多信息,請訪問WordPress Codex

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM