wp_redirect()-すでに送信されたヘッダー


10

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

機能しておらず、次のエラーが表示されます。

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

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

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

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

次に、これらの関数の両方を使用して、サインアップフォームを表示します。

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

回答:


15

答えを見つけた(経由)

関数を使用する代わりに、「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;
    }
}     
?>

エラーは解消されましたが、投稿は保存されませんでした!
Subrata Sarkar 2017年

6

あなたはwp_redirect() 前に使用する必要がありますget_header() それからそれはヘッダーエラーを表示しません。


3
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();//....
}
});

助けてくれてありがとう、しかしそのコードは私にはうまくいきませんでした。アクションを「wp_loaded」に追加して動作させる必要がありました(私の答えを参照)
Snowball

is_page_template()条件付きでリダイレクトするときに確立する必要がある場合にうまく機能します。
無法

1

あなたもこれを行うことができます

以下の行の代わりに

wp_redirect( "$ url");

書く

echo("<script>location.href = '".$url."'</script>");

または

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

それは間違いなくあなたの問題を解決します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.