it-roy-ru.com

wp_redirect не работает

Есть форма ввода HTML. Вот код:

<?php if(isset($_POST['login'])) { 
    wp_redirect("/"); 
}

<form accept-charset="UTF-8" method="post" >
    ...
    <center><input name="login" type="submit" value="вход" />
</form>

Но перенаправление не работает. Установите перенаправления отладочного плагина на wp, вот что он показал.

http://i.stack.imgur.com/Im4eE.png

PS: 

<?php wp_redirect( 'http://www.example.com', 301 ); exit; ?>

Это тоже не работает.

9
Rincver

Используйте следующий код: -

function app_output_buffer() {
    ob_start();
} // soi_output_buffer
add_action('init', 'app_output_buffer');

Или добавить ob_start () как первая строка вашей собственной функции, которая подключается к 'init'

Не забудьте добавить 

exit();

сразу после вашего звонка 

wp_redirect($url);

ссылка на сайт:

https://tommcfarlin.com/wp_redirect-headers-already-sent/

7
Pratyush Deb

Я думаю, ваш код не начинается с этого условия if!

wp_redirect отправит заголовок, поэтому печать/отображение чего-либо перед ним приведет к сбою.

Так что проверьте и посмотрите, если до этого:

if(isset($_POST['login'])) 
{
    wp_redirect("/");
    exit;
}

персонажа нет. Также не забудьте поставить exit; сразу после wp_redirect.

6
revo

Просто используйте это как ниже:

ob_clean();
$url = get_home_url() . '/login';
wp_redirect($url);
exit();

Или вы можете использовать Javascript для перенаправления.

<script>window.location='http://www.google.com'</script>
1
Bhautik Nada

Убедитесь, что у вас нет: get_header(); или какой-либо функции wordpress, которая потенциально создает содержимое, такое как верхний и нижний колонтитулы в вашем шаблоне. В противном случае перенаправление не будет работать.

Некоторые разработчики пытаются очистить страницу с помощью ob_start();, но если у вас есть контент на странице, даже если вы используете ob_start();, перенаправление не будет работать.

а затем просто попробуйте этот код:

wp_redirect(get_permalink($post->ID));
exit;
0
Fury

Попробуйте следующее, что также приводит к появлению сообщений об ошибках:

error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);


flush();
header("Location: http://www.website.com/");
die('should have redirected by now');

Из перенаправление заголовка PHP не работает

Правка:

Так как он дает вам предупреждение headers already sent, попробуйте добавить следующее в самом начале вашего кода:

ob_start();

Долгосрочный ответ заключается в том, что все выходные данные из ваших PHP сценариев должны быть в буфере в переменных. Это включает в себя заголовки и вывод тела. Затем в конце ваших скриптов сделайте любой вывод, который вам нужен.

Очень быстрое решение вашей проблемы - добавить ob_start (); как самое первое в вашем скрипте, если вам нужно только в этом скрипт. Если вам это нужно во всех ваших скриптах, добавьте его как самый первый вещь в вашем файле header.php.

Это включает функцию буферизации вывода PHP. В PHP при выводе что-то (сделать эхо или распечатать), если нужно отправить заголовки HTTP в то время. Если вы включите буферизацию вывода, вы можете вывести в скрипт, но PHP не должен отправлять заголовки, пока буфер не станет очищено. Если вы включите его и не выключите, PHP будет автоматически очищать все в буфере после завершения скрипта Бег. Там действительно нет никакого вреда, просто включив его почти во всех случаев и может дать вам небольшое увеличение производительности при некоторых конфигурации ...

С Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены.

0
BrownEyes

Я столкнулся с той же проблемой, и ни одно из этих решений не помогло мне.

Единственное, что я заметил, отличается на странице, что я использовал wp_redirect ниже get_header(), и он будет работать нормально, если вы использовали его выше.

0
abdallah Nofal