wp_redirect () - header sudah dikirim

10

Saya mencoba menggunakan wp_redirect()untuk mengarahkan ulang pengguna setelah berhasil mengirimkan formulir pendaftaran pada halaman.

Ini tidak berfungsi dan menunjukkan kesalahan berikut:

Peringatan: Tidak dapat mengubah informasi header - header sudah dikirim oleh (output dimulai di /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) di / Applications / MAMP / htdocs / theme / wp- termasuk / pluggable.php on line 1178

Saya mengerti sudah ada output sebelumnya, itu sebabnya tidak bekerja, tapi saya tidak tahu bagaimana membuat ini bekerja.

Formulir pendaftaran diberikan oleh suatu fungsi, dan dikirimkan oleh fungsi lain, di dalam functions.php saya.

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

Kemudian kedua fungsi ini digunakan di mana saya ingin menunjukkan formulir pendaftaran.

Saya khawatir itu bukan hal terbaik untuk dilakukan. Saya harus membuat beberapa tindakan yang melakukan itu, tetapi saya tidak tahu bagaimana menerapkannya. Sebagian besar tutorial yang saya temukan menunjukkan hasil langsung di halaman yang sama dan tidak memerlukan arahan ulang tambahan. Mungkin itu sebabnya mereka bekerja dengan fungsi di dalam functions.php

Semakin bertambah
sumber

Jawaban:

15

Ditemukan jawabannya (via)

Alih-alih menggunakan fungsi saya menambahkan tindakan ke "wp_loaded", yang memastikan bahwa itu dimuat sebelum header dikirim.

<?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;
    }
}     
?>
Semakin bertambah
sumber
Itu menghilangkan kesalahan tetapi pos tidak menyimpan!
Subrata Sarkar
6

Anda harus menggunakan wp_redirect() sebelum get_header() Maka tidak akan menampilkan kesalahan header.

mynamAvinash
sumber
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();//....
}
});
Abhisek Malakar
sumber
Terima kasih atas bantuannya, tetapi kode itu tidak berhasil untuk saya. Diperlukan untuk menambahkan tindakan ke "wp_loaded" untuk membuatnya bekerja (Lihat jawaban saya)
Snowball
Berfungsi dengan baik jika Anda perlu memastikan is_page_template()kapan redirect diarahkan.
Lawless
1

Anda juga bisa melakukan ini

Alih-alih baris di bawah ini

wp_redirect ("$ url");

menulis

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

atau

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

Ini pasti akan menyelesaikan masalah Anda.

Grafis Hadid
sumber