Cum să redirecționezi utilizatorul către o pagină după trimiterea formularului

27 iun. 2014, 11:29:28
Vizualizări: 17.1K
Voturi: 2

Am trei filtre dropdown în frontend pentru selectarea țării, teritoriului și regiunii și trebuie să redirecționez utilizatorul către pagina country/territory/region în funcție de valorile selectate la apăsarea butonului Submit.

Pentru informație, am pagini cu același slug. De exemplu: example.com/nume-tara/nume-teritoriu/nume-regiune

Încerc să folosesc wp_redirect( $final_url ); exit; dar primesc o avertizare:

Warning: Cannot modify header information - headers already sent by (output started at E:\path\to\root-folder\wp-includes\class.wp-styles.php:154) in E:\path\to\root-folder\wp-includes\pluggable.php on line 1121

Vă rog să mă ajutați.

Poate cineva să-mi sugereze o metodă mai bună?

//Edit- iată codul meu

if(isset($_POST['submit']) and $_POST['action']=='findurl')
{
    //Rezultat $POST Array ( [countrySelect] => 1 [territorySelect] => 1 [regionSelect] => 2 )
    if (isset($_POST['countrySelect'])){
        $rows_country_url = $wpdb->get_results("select url from country where id=".$_POST['countrySelect']."");
    }

    if (isset($_POST['territorySelect'])){
        $rows_territory_url = $wpdb->get_results("select url from territory where id=".$_POST['territorySelect']."");
    }

    if (isset($_POST['regionSelect'])){
        $rows_region_url = $wpdb->get_results("select url from region where id=".$_POST['regionSelect']."");
    }

    if($rows_country_url[0]->url !=''){
    $final_url = home_url('/').$rows_country_url[0]->url;}

    if($rows_territory_url[0]->url !=''){
    $final_url = $final_url.'/'.$rows_territory_url[0]->url;}

    if($rows_region_url[0]->url !=''){
    $final_url = $final_url.'/'.$rows_region_url[0]->url;}

    echo $final_url;

    if($final_url!=''){ 
    wp_redirect( home_url() ); exit;
    echo "not blank";
    }else{ echo "Please select values";}
}
2
Comentarii

Unde folosești wp_redirect? Nu poți afișa niciun HTML și apoi să apelezi wp_redirect. Trebuie apelat înainte de a afișa orice conținut către browser. Arată niște cod.

Todd Rowan Todd Rowan
27 iun. 2014 11:35:57

Bună Todd, am editat întrebarea mea pentru a afișa codul. Te rog să arunci o privire.

user2443437 user2443437
27 iun. 2014 11:54:50
Toate răspunsurile la întrebare 2
2

Asigurați-vă că nu există nicio ieșire de date sau spații goale înainte de wp_redirect( $final_url ); exit;, altfel această avertizare va apărea întotdeauna.

De asemenea, opțional puteți folosi

<?php
//Cod Php 
 ?>
<script type="text/javascript">
      document.location.href="http://example.com";
</script>
<?php
//cod php
?>
27 iun. 2014 12:09:13
Comentarii

acest script funcționează perfect și mi-a rezolvat problema. Nu sunt sigur de ce wp_redirect nu funcționează după ce am eliminat instrucțiunile echo și spațiile dintre argumente. Acțiunea mea este <?php the_permalink()?> Trebuie să apelez vreo funcție și să pun acest cod în ea pentru a folosi wp_redirect?

user2443437 user2443437
27 iun. 2014 12:40:51

Poate exista ieșire de date înainte de redirectare, trebuie să faci debug pentru a identifica exact unde se întâmplă.

TBI Infotech TBI Infotech
30 iun. 2014 18:23:09
0

Soluția mea este.

  1. Creează o funcție pentru redirecționare JavaScript.

    function rm_redirect($url){
        $string = '';
        $string .= 'window.location = "' . $url . '"';
        $string .= '';
        echo $string;
    }
  2. Apelează această funcție ori de câte ori dorești, astfel:

    rm_redirect('<a href="a0">http://example.com</a>');
17 ian. 2019 12:11:45