Функция wp_redirect () не работает
7 ответ
- голосов
-
- 2012-03-21
Здесь две ошибки:
- Не используйте
$post->guid
в качестве URL-адреса - Вы должны
exit()
после использованияwp_redirect()
( см. Кодекс ) <цитата>wp_redirect()
не завершается автоматически и почти всегда должен сопровождаться выходом.
//..... code as in question $post_id = wp_insert_post($new_post); $url = get_permalink( $post_id ); wp_redirect($url); exit();
Two things wrong here:
- Don't use
$post->guid
as an url - You must
exit()
after usingwp_redirect()
(see the Codex)wp_redirect()
does not exit automatically and should almost always be followed by exit.
//..... code as in question $post_id = wp_insert_post($new_post); $url = get_permalink( $post_id ); wp_redirect($url); exit();
-
Обыграть вас на 30 секунд: DBeat you by 30 seconds :D
- 0
- 2012-03-21
- soulseekah
-
это не работает,если я запускаю консоль страницы,показывающую 302 Найдено 479 мс jquery ... r=1.7.1 (строка 4) ПОЛУЧИТЬ http://localhost/wordpress/newpages-17/ 200 ОК 1.2 с загрузка ..........this is not working, if i run the page console show 302 Found 479ms jquery...r=1.7.1 (line 4) GET http://localhost/wordpress/newpages-17/ 200 OK 1.2s loading..........
- 0
- 2012-03-21
- SANS780730
-
Это ошибка JS.Ничего общего с `wp_redirect`.Приведенный выше ответ - правильный способ сделать это,поэтому вы,должно быть,делаете что-то еще не так.Thats a JS error. Nothing to do with `wp_redirect`. The above answer is the correct way to do it, so you must be doing something else wrong.
- 2
- 2012-03-21
- Stephen Harris
-
извините. показывать только GET localhost/wordpress/newpages-17 200 OK 1.2s загрузка ..........sorry.it show only GET localhost/wordpress/newpages-17 200 OK 1.2s loading..........
- 0
- 2012-03-21
- SANS780730
-
@StephenHarris,не могли бы вы просмотреть мой вопрос о перенаправлении на http://wordpress.stackexchange.com/q/76991/10413 Я также пробовал ваш код из этого ответа,используя $pid,но все еще не могу заставить его работать.благодаря@StephenHarris would you mind looking over my redirect question at http://wordpress.stackexchange.com/q/76991/10413 I've also tried your code from this answer using $pid but still can't get it to work. Thanks
- 0
- 2012-12-22
- Anagio
-
Этот вопрос получил огромное количество просмотров,поэтому примите этот ответ,если он решил вашу проблему.Таким образом,вопрос отображается как ответ и помогает нам поддерживать порядок на сайте.Благодарю.This question gets a huge number of views, so please consider accepting this answer if it solved your problem. That way the question shows up as answered and helps us keep the site tidy. Thanks.
- 0
- 2016-07-23
- Andy Macaulay-Brook
-
- 2015-12-10
У меня есть простое решение,прочтите:
-
Если вы используете
wp_redirect($url)
в файлах темы,и он не работает,добавьтеob_clean() ob_start()
в свой файл функции навверху. -
При использовании в плагине добавьте
ob_clean() ob_start()
в основной файл плагина сверху.
И убедитесь,что вы добавили функцию
exit() function after wp_redirect($url)
Вот так:$url = 'http://example.com'; wp_redirect($url); exit();
I have a simple solution, please read:
If you are using
wp_redirect($url)
in theme files, and it is not working addob_clean() ob_start()
in your function file on top.If using in plugin add
ob_clean() ob_start()
in the main plugin file on top.
And make sure you have added
exit() function after wp_redirect($url)
Like this:$url = 'http://example.com'; wp_redirect($url); exit();
-
Это решает проблему с Mozilla Firefox,возвращающим 200 вместо 302 для перенаправления.Chrome перенаправляет,а Firefox - нет.Это исправление помогает.Спасибо!This solves the issue with Mozilla Firefox returning 200 instead of 302 for the redirection to take place. Chrome redirects while Firefox doesn't. This fix helps. Thank you!
- 0
- 2018-09-12
- El'Magnifico
-
Это более подробный ответ,если вы создаете плагин или разрабатываете шаблон.работал у меня.This is a more detailed answer if you are creating a plugin or designing template. worked for me.
- 0
- 2019-07-10
- Sayed Mohd Ali
-
Я изо всех сил пытался заставить эту работу работать в моей настраиваемой теме ... Работает как шарм ...I've been struggling to make this work in my custom theme... Works like a charm...
- 0
- 2019-10-08
- ShivangiBilora
-
- 2013-05-01
Не уверен,поможет ли это ... но я обнаружил,что у меня есть код в шаблоне и я начал сget_header () таким образом:
<?php /** * .. Template comments */ get_header(); if(...) { ... if(...) { ... wp_redirect($url); exit(); } } ?>
и получал ту же проблему с ранее отправленным заголовком ... Я просто переместилget_header () в конец блока и вуаля !!!
<?php /** * .. Template comments */ if(...) { ... if(...) { ... wp_redirect($url); exit(); } } get_header(); ?>
Ни один плагин не отключен.и все было хорошо ... вы можете попробовать,если это сработает для вас
I am not sure if this will help... but I found that I had some code in a template and I was starting with get_header() in this way:
<?php /** * .. Template comments */ get_header(); if(...) { ... if(...) { ... wp_redirect($url); exit(); } } ?>
and was getting the same issue of header previously sent... What I did was just move get_header() to the end of the block and voila!!!
<?php /** * .. Template comments */ if(...) { ... if(...) { ... wp_redirect($url); exit(); } } get_header(); ?>
No plugin was disabled. and everything was ok... you may give a try if this works for you
-
Это хороший способ сделать это,если у вас есть доступ к исходному тексту темы.Перенаправления должны выполняться до вызоваget_header.This is a good way to do it, if you have access to the theme source. Redirects should run before the call to `get_header`.
- 0
- 2013-05-01
- s_ha_dum
-
удалениеget_header () также сработало для меня!removing get_header() also worked for me!
- 0
- 2014-10-31
- Magico
-
Готов поспорить,что это самая частая причина для большинства людей,которые борются с тем,что `wp_redirect` не работает.I'd bet this is the most common cause for most people struggling with `wp_redirect` not working
- 0
- 2019-02-25
- joehanna
-
- 2012-03-21
Никогда не используйте значение GUID публикации,оно не обязательно должно совпадать с реальным URL-адресом сообщения.
http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note
wp_redirect( get_permalink( $post_id ) ); exit(); // always exit
Также убедитесь,что
wp_redirect
не подключен к чему-то еще,что мешает ему правильно выполнять свою работу.Отключите все плагины и вернитесь к Twenty Ten/Eleven,чтобы проверить.Never ever use the post GUID value, it does not have to match the real URL of the post.
http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note
wp_redirect( get_permalink( $post_id ) ); exit(); // always exit
Also, make sure
wp_redirect
is not plugged by something else which prevents it from doing its job correctly. Deactivate all plugins and revert to Twenty Ten/Eleven to check.-
+1 хороший призыв к подключению `wp_redirect`+1 good call on `wp_redirect` being pluggable
- 0
- 2012-03-21
- Stephen Harris
-
спасибо ....thaning you....
- 0
- 2012-03-21
- SANS780730
-
- 2019-01-16
Убедитесь,что у вас нет:
get_header();
или какой-либо функции wordpress,которая потенциально создает в вашем шаблоне такое содержимое,как верхний и нижний колонтитулы.В противном случае перенаправление не сработает.Некоторые разработчики пытаются очистить страницу с помощью
ob_start();
,но если у вас есть контент на вашей странице,даже если вы используетеob_start();
,перенаправление выиграло 'т работать.а затем просто попробуйте этот код:
wp_redirect(get_permalink($post->ID)); exit;
Make sure you don't have:
get_header();
or any wordpress function that potentially creates contents like header and footer in your template. Otherwise the redirection won't work.Some developers try to clear the page by using
ob_start();
but if you have content in your page even if you useob_start();
the redirection won't work.and then simply try this code:
wp_redirect(get_permalink($post->ID)); exit;
-
- 2019-08-06
if( is_page( ['wfp-dashboard', 'wfp-checkout'] ) ){ if(!is_user_logged_in()){ @ob_flush(); @ob_end_flush(); @ob_end_clean(); wp_redirect( wp_login_url() ); exit(); } }
if( is_page( ['wfp-dashboard', 'wfp-checkout'] ) ){ if(!is_user_logged_in()){ @ob_flush(); @ob_end_flush(); @ob_end_clean(); wp_redirect( wp_login_url() ); exit(); } }
-
Не могли бы вы объяснить,как это решает проблему?Я не уверен,почему в коде есть буферы вывода,и в них есть оператор `@`,`@` не предотвращает возникновение ошибок,он просто скрывает их из журнала ошибокCan you include some explanation of how this fixes the issue? I'm not sure why there are output buffers in the code, and they have the `@` operator, `@` doesn't prevent errors from happening, it just hides them from the error log
- 0
- 2020-07-22
- Tom J Nowell
-
- 2020-07-22
уже отправленный заголовок является основной причиной.Поскольку заголовок уже отправлен,он не может повторно отправить его и не может перенаправить.Используйте перед заголовком,как в хуке инициализации.
add_action('init', 'your_app_function');
header already sent is main reason. As header already sent, so its unable to resend it and fails to redirect. Use before header like in init hook.
add_action('init', 'your_app_function');
wp_redirect($post->guid)
не работает.Как я могу это исправить?Это мой код: