wp_redirect() - headere deja trimise

23 feb. 2015, 13:37:34
Vizualizări: 47.1K
Voturi: 19

Încerc să folosesc wp_redirect() pentru a redirecționa utilizatorul după completarea cu succes a unui formular de înregistrare pe pagină.

Nu funcționează și afișează următoarea eroare:

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) in /Applications/MAMP/htdocs/theme/wp-includes/pluggable.php on line 1178

Înțeleg că a existat deja un output înainte, de aceea nu funcționează, dar nu am idee cum să fac să meargă.

Formularul de înregistrare este randat de o funcție și este trimis de o altă funcție, în interiorul fișierului functions.php.

if ( isset( $_POST['subscribe'] ) ) {
    // Trimite formularul și ar trebui să redirecționeze apoi
    wp_redirect("/thank-you/");
    exit;
}

Apoi ambele funcții sunt folosite acolo unde vreau să afișez formularul de înregistrare.

Mi-e teamă că nu este cea mai bună abordare. Ar trebui să creez o acțiune care să facă asta, dar nu am idee cum să implementez. Majoritatea tutorialelor pe care le-am găsit arată rezultatele direct pe aceeași pagină și nu necesită o redirecționare suplimentară. Probabil de aceea funcționează cu funcții în interiorul fișierului functions.php

0
Toate răspunsurile la întrebare 5
1
22

Am găsit răspunsul (prin)

În loc să folosesc funcția direct, am adăugat o acțiune la "wp_loaded", ceea ce asigură că aceasta se încarcă înainte de a fi trimise orice anteturi.

<?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;
    }
}     
?>
23 feb. 2015 14:08:38
Comentarii

A scăpat de eroare, dar postarea nu s-a salvat!

Subrata Sarkar Subrata Sarkar
23 feb. 2017 16:24:57
0
15

Trebuie să folosești wp_redirect() înainte de get_header() Astfel nu va apărea eroarea de header.

23 feb. 2015 14:07:11
2

poți face și asta

În loc de linia de mai jos

wp_redirect("$url");

scrie

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

sau

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

Cu siguranță va rezolva problema ta.

20 feb. 2020 07:30:29
Comentarii

mersi mult frate !

Marco Floriano Marco Floriano
24 oct. 2023 05:50:55

cu plăcere...@MarcoFloriano

Mohammad Zaer Mohammad Zaer
24 oct. 2023 18:58:43
2
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// facem această condiție să se potrivească doar când un formular de înregistrare este trimis
/**
 * fă-ți treaba aici
 */
wp_redirect();//....
}
});
23 feb. 2015 13:43:51
Comentarii

Mulțumesc pentru ajutor, dar acel cod nu a funcționat pentru mine. A trebuit să adaug acțiunea la "wp_loaded" pentru a funcționa (Vezi răspunsul meu)

Snowball Snowball
23 feb. 2015 14:09:36

Funcționează bine dacă trebuie să utilizezi is_page_template() atunci când redirecționezi condiționat.

jaredrethman jaredrethman
2 apr. 2020 08:09:40
0

Dacă crezi un plugin, poți apela ob_start(); la începutul codului plugin-ului sau ob_start(); în partea de sus a fișierului functions.php înainte de a începe codul

Descrierea imaginii

17 mar. 2021 01:16:53