Как перенаправить пользователя на страницу после отправки формы

27 июн. 2014 г., 11:29:28
Просмотры: 17.1K
Голосов: 2

У меня есть три выпадающих фильтра на сайте для выбора страны, региона и области, и мне нужно перенаправить пользователя на страницу country/territory/region в зависимости от выбранных значений при нажатии кнопки Submit.

Для справки: у меня есть страницы с такими же слагами, например: example.com/country-name/territory-name/region-name

Я пытаюсь использовать wp_redirect( $final_url ); exit;, но получаю предупреждение:

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

Помогите, пожалуйста.

Может кто-нибудь предложить более подходящий способ?

//Редактирование- вот мой код

if(isset($_POST['submit']) and $_POST['action']=='findurl')
    {
        //Результат $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
Комментарии

Где вы используете wp_redirect? Нельзя выводить HTML, а затем вызывать wp_redirect. Функция должна быть вызвана до любого вывода контента в браузер. Покажите ваш код.

Todd Rowan Todd Rowan
27 июн. 2014 г. 11:35:57

Привет, Todd, я отредактировал свой вопрос, добавив код. Пожалуйста, взгляните.

user2443437 user2443437
27 июн. 2014 г. 11:54:50
Все ответы на вопрос 2
2

Убедитесь, что перед wp_redirect( $final_url ); exit; нет вывода данных или пустых строк, иначе это предупреждение будет появляться постоянно.

Также, по желанию, вы можете использовать:

<?php
//PHP код 
 ?>
<script type="text/javascript">
      document.location.href="http://example.com";
</script>
<?php
//PHP код
?>
27 июн. 2014 г. 12:09:13
Комментарии

Этот скрипт работает отлично и решил мою задачу. Не уверен, почему wp_redirect не работает после удаления echo и пробелов между аргументами. Мой action формы — <?php the_permalink()?>. Нужно ли вызывать какую-то функцию и поместить этот код в неё для использования wp_redirect?

user2443437 user2443437
27 июн. 2014 г. 12:40:51

Перед редиректом может быть вывод любых данных, нужно тщательно отладить, где именно это происходит.

TBI Infotech TBI Infotech
30 июн. 2014 г. 18:23:09
0

Мое решение.

  1. Создать функцию для JavaScript редиректа.

    function rm_redirect($url){
        $string = '';
        $string .= 'window.location = "' . $url . '"';
        $string .= '';
        echo $string;
    }
  2. Вызвать эту функцию когда нужно следующим образом.

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