web-dev-qa-db-ja.com

wp_redirect() - ヘダはすでに送信されている

ページにサインアップフォームを正しく送信した後で、wp_redirect()を使用してユーザーをリダイレクトしようとしています。

動作していないため、次のエラーが表示されます。

警告:/ Applications/MAMP/htdocs/theme/wp-の(/Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10で開始された出力で)既に送信されたヘッダー情報 - ヘッダー情報は変更できません。 1178行目のincludes/pluggable.php

私は、以前に出力されたことがあることを理解しています、それがそれが動いていない理由です、しかし、私はこの仕事をする方法についての手がかりがありません。

サインアップフォームは関数によってレンダリングされ、私のfunctions.phpの中にある別の関数によって送信されます。

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

それから、私が申し込みフォームを見せたいところでこれらの機能の両方が使われます。

それが最善のことではないと思います。それを実現するためのアクションを作成する必要がありますが、それを実装する方法がわかりません。私が見つけたチュートリアルのほとんどは、同じページに直接結果を表示し、追加のリダイレクトを必要としません。多分それは彼らがfunctions.phpの中の関数で働いている理由です

9
Snowball

答えが見つかりました (via)

私が "wp_loaded"にアクションを追加した関数を使う代わりに、それはヘッダが送信される前にそれがロードされることを確実にします。

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>
15
Snowball

あなたはwp_redirect()の前にget_header()を使わなければなりません。それからそれはヘッダエラーを表示しません。

4
mynamAvinash
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});
2
Abhisek Malakar