Cómo redirigir al usuario a una página después del envío de un formulario

27 jun 2014, 11:29:28
Vistas: 17.1K
Votos: 2

Tengo tres filtros desplegables en el sitio para seleccionar país, territorio y región y necesito redirigir al usuario a la página país/territorio/región según los valores seleccionados al hacer clic en el botón Enviar.

Para su información, tengo páginas con el mismo slug. Ejemplo: ejemplo.com/nombre-pais/nombre-territorio/nombre-region

Estoy intentando usar wp_redirect( $final_url ); exit; pero me muestra 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

¿Alguien puede ayudarme?

¿Alguien puede sugerirme una mejor forma de hacerlo?

//Edición- aquí está mi código

if(isset($_POST['submit']) and $_POST['action']=='findurl')
    {
        //Resultado del Array $POST ( [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 "Por favor selecciona valores";}
    }
2
Comentarios

¿Dónde estás usando wp_redirect? No puedes mostrar ningún HTML y luego llamar a wp_redirect. Debe llamarse antes de mostrar cualquier contenido al navegador. Muestra algo de código.

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

Hola Todd, he editado mi pregunta para mostrar el código. Por favor, échale un vistazo.

user2443437 user2443437
27 jun 2014 11:54:50
Todas las respuestas a la pregunta 2
2

Asegúrate de que no haya salida de datos o espacios en blanco antes de wp_redirect( $final_url ); exit; de lo contrario, esta advertencia aparecerá siempre.

Opcionalmente también puedes usar:

<?php
//Código PHP
?>
<script type="text/javascript">
      document.location.href="http://example.com";
</script>
<?php
//código PHP
?>
27 jun 2014 12:09:13
Comentarios

este script funciona perfectamente y resolvió mi propósito. No estoy seguro de por qué wp_redirect no funciona después de eliminar las declaraciones echo y eliminar los espacios entre los argumentos. Mi acción from es <?php the_permalink()?> ¿Debo llamar a alguna función y colocar este código en ella para usar wp_redirect?

user2443437 user2443437
27 jun 2014 12:40:51

Puede haber cualquier salida de datos antes de la redirección, necesitas depurar mucho para saber exactamente dónde está ocurriendo.

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

Mi solución es.

  1. Crear una función para redirección en javascript.

    function rm_redirect($url){ $string = ''; $string .= 'window.location = "' . $url . '"'; $string .= ''; echo $string; }

  2. Llamar a esta función cuando quieras de esta manera.

    rm_redirect('http://example.com');

17 ene 2019 12:11:45