Come reindirizzare l'utente a una pagina dopo l'invio di un modulo

27 giu 2014, 11:29:28
Visualizzazioni: 17.1K
Voti: 2

Ho tre filtri a dropdown nel frontend per selezionare paese, territorio e regione e devo reindirizzare l'utente alla pagina paese/territorio/regione in base ai valori selezionati al click del pulsante Invia.

Per info, ho pagine con lo stesso slug. Esempio: example.com/nome-paese/nome-territorio/nome-regione

Sto provando a usare wp_redirect( $final_url ); exit; ma ottengo un warning:

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

Qualcuno può aiutarmi?

Potete suggerirmi un metodo migliore?

//Modifica- ecco il mio codice

if(isset($_POST['submit']) and $_POST['action']=='findurl')
    {
        //Risultato $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 "Si prega di selezionare i valori";}
    }
2
Commenti

Dove stai usando wp_redirect? Non puoi emettere alcun HTML e poi chiamare wp_redirect. Deve essere chiamato prima di emettere qualsiasi contenuto al browser. Mostra un po' di codice.

Todd Rowan Todd Rowan
27 giu 2014 11:35:57

Ciao Todd, ho modificato la mia domanda per mostrare il codice. Per favore dai un'occhiata.

user2443437 user2443437
27 giu 2014 11:54:50
Tutte le risposte alla domanda 2
2

Assicurati che non ci siano output di dati o spazi vuoti sopra wp_redirect( $final_url ); exit; altrimenti questo avviso apparirà sempre.

In alternativa puoi usare

<?php
//Codice PHP 
 ?>
<script type="text/javascript">
      document.location.href="http://example.com";
</script>
<?php
//codice php
?>
27 giu 2014 12:09:13
Commenti

questo script funziona alla perfezione e ha risolto il mio problema. Non sono sicuro del perché wp_redirect non funzioni dopo aver rimosso le istruzioni echo e gli spazi tra gli argomenti. La mia azione è <?php the_permalink()?> Dovrei chiamare qualche funzione e inserire questo codice al suo interno per utilizzare wp_redirect?

user2443437 user2443437
27 giu 2014 12:40:51

Potrebbero esserci dati in output prima del reindirizzamento, devi eseguire il debug per capire esattamente dove si trova il problema.

TBI Infotech TBI Infotech
30 giu 2014 18:23:09
0

La mia soluzione è.

  1. Crea una funzione per il reindirizzamento JavaScript.

    function rm_redirect($url){
        $string = '';
        $string .= 'window.location = "' . $url . '"'; 
        $string .= '';
        echo $string;
    }
  2. Chiama questa funzione quando vuoi in questo modo.

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