0

add_role( 'travel_agent', 'Travel Agent', array( 'book_hotel' ) );テーマの functions.phpを使用して、「旅行代理店」というカスタム ロールを作成しました。

ただし、このユーザーにダッシュボードへのアクセスを許可したくないため、ログイン後に「my-account」にリダイレクトしたいと考えています。

私は wp-login.php/functions.php でこのコードを使用しています。

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

add_filter('login_redirect', 'redirect_agents');

しかし、リダイレクトされません..しかし、If at functions.php なしでそのようなコードを使用すると、次のようになります。

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

add_filter('login_redirect', 'redirect_agents');

動作しますが、すべてのユーザーが私のアカウントにリダイレクトされます。どんな助けでも大歓迎です!

4

2 に答える 2

1

WordPress グローバル $current_user を使用しないのはなぜですか。

if(in_array('travel_agent', $current_user->roles)) {
  return '/my-account';
}
于 2013-07-30T07:33:14.813 に答える
0

フィルターは、(現在のリダイレクト値を含む)、(ユーザーの送信元の URL)、および(WP_User オブジェクトとしてログインしたユーザー)のlogin_redirect3 つのパラメーターを受け入れます。redirect_torequestuser

関数内でパラメーターを使用して、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 を参照してください

于 2013-07-30T07:49:49.857 に答える