web-dev-qa-db-ja.com

wp-login.php - ログインユーザーをカスタムURLにリダイレクトする

ユーザーログイン時に、リダイレクトURLを簡単に変更できます( thisthis 、または this を参照)が、ユーザーが/wp-login.phpにアクセスすると、ダッシュボードにリダイレクトされますすでにログインしている場合

私の質問は、ユーザーが/wp-login.phpandにアクセスして既にログインしているときに、それらをカスタムURLにリダイレクトする方法を教えてください。

1

このような問題で何が起きているのかを理解するための最善の方法は、情報源に行くことです。文字通り。

wp-login.php を調べて、HTMLレンダリングが行われる前に発生するアクションを探してください。あなたが探しているフックは login_init です。それにコールバックを追加し、ユーザがログインしているかどうかを確認し、そうであればそれらをリダイレクトします。

ここでの他の唯一の障害は、wp-login.phpがログアウトも処理することです。そのため、ログアウトが進行中でないことを確認するために global $action 変数をチェックする必要があります。

add_action('login_init', 'wpse187831_redir_loggedin');
function wpse187831_redir_loggedin()
{
    global $action;

    if ('logout' === $action || !is_user_logged_in()) {
        return;
    }

    wp_redirect(apply_filters(
        'wpse187831_loggedin_redirect',
        current_user_can('read') ? admin_url() : home_url(),
        wp_get_current_user()
    ), 302);
    exit;
}

ちょっと余分なものがそこにあります:

  • apply_filtersを呼び出すことで、他のプラグインがフックして私のリダイレクトを変更できるようになります。このフィルタは、現在のユーザーと同様にリダイレクト自体を取得します。
  • 現在のユーザーがそこにリダイレクトする前に実際に管理領域にアクセスできるかどうかを確認するためのチェックがあります。

これがその小さなスニペットです/ プラグインとして

3
chrisguitarguy

現在のページがログインしているかどうか、グローバル変数$pagenowとカスタムURLへのwp_redirect()を条件is_user_logged_in内で使用することで確認できます。

function redirect_logged_in_user() 
{
    if( is_user_logged_in ) {
      wp_redirect('http://customurl');
    }
}

global $pagenow;
if( $pagenow == 'wp-login.php')     
redirect_logged_in_user();
1
Manoj Kumar