web-dev-qa-db-ja.com

特定のページからログインした場合のログインリダイレクト

私はテーマ関数にかなり標準的なログインリダイレクトスクリプトを使用していましたが、それが私のWebサイトに不可欠なプラグインのバグを引き起こしていることを知りました。つまり、プラグインのフロントエンドシステム内で、ユーザーはライトボックスモーダルでアカウントを登録できます。私の一般的なリダイレクトを有効にすると、モーダルは登録を完了することができません。

ですから、私がやろうとしていることは、スラッグによって識別できる1ページを除いて、すべてのページで私のログインリダイレクトを実行することです。このページはプラグインによって自動生成されるので、IDなどは持っていません。

これが私の既存のログインリダイレクトです。とても簡単です。

add_action('wp_login','auto_redirect_after_login');
function auto_redirect_after_login(){
    wp_redirect(home_url());
    exit();
}

私の障害は、このユーザー登録は無限のページ数で発生する可能性があるということですが、それらはすべてプラグインの「子」です。つまり、それらすべてが同じURL構造を持つということです。

私がリダイレクト作業をする必要がないすべてのページは、.com /ourses/*になります。

何か案は?

**********更新**********

これが私が今いるところですが、うまくいきません。

add_action('wp_footer', 'detect_page_for_redirect');
function detect_page_for_redirect(){
    if( !is_singular('course')) {
        add_action('wp_login','auto_redirect_after_login');
    }
}

function auto_redirect_after_login(){
    wp_redirect(home_url());
    exit();
}
1
C Porter

カスタムフォームフィールドを追加するには、次のようにします。

add_action('login_form', 'custom_login_field');
function custom_login_field() {
    if (!is_singular('course')) {
        echo "<input type='hidden' name='context' value='notcourse'>";
    }
}

それが設定されていてログイン時にリダイレクトを行う場合には、これが選択されます。

add_action('wp_login', 'auto_redirect_after_login');    
function auto_redirect_after_login() {
    if ( (isset($_POST['context'])) && ($_POST['context'] == 'notcourse') ) {
         wp_redirect(home_url()); exit();
    }
}

これはあなたが意図しているもののように思われるので、コース以外のページから送信されたログインフォームはログイン後に自宅にリダイレクトされます。

更新

ロジックを切り替えると代わりにうまくいくかもしれません:

add_action('login_form', 'custom_login_field');
function custom_login_field() {
    if (is_singular('course')) {
        echo "<input type='hidden' name='context' value='course'>";
    }
}

add_action('wp_login', 'auto_redirect_after_login');    
function auto_redirect_after_login() {
    if ( (isset($_POST['context'])) && ($_POST['context'] == 'course') ) {
         return;
    }
    wp_redirect(home_url()); exit();
}
0
majick