wp_redirect () - заголовки вже надіслані


10

Я намагаюся використовувати wp_redirect()для переадресації користувача після успішного подання форми на реєстрацію на сторінці.

Він не працює і показує таку помилку:

Попередження: Неможливо змінити інформацію заголовка - заголовки, які вже надіслані (вихід запущений в /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) в / Applications / MAMP / htdocs / topic / wp- включає / pluggable.php на лінію 1178

Я розумію, що вже було зроблено вихід, тому це не працює, але у мене немає поняття, як зробити цю роботу.

Форма реєстрації надається функцією та подається іншою функцією всередині моїх функцій.php.

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

Тоді обидві ці функції використовуються там, де я хочу показати форму реєстрації.

Боюся, що це не найкраще. Я повинен створювати якісь дії, які це роблять, але я не знаю, як це здійснити. Більшість підручників, які я знайшов, показують результати безпосередньо на одній сторінці і не потребують додаткового переадресації. Можливо, тому вони працюють з функціями всередині funk.php

Відповіді:


16

Знайшов відповідь (через)

Замість використання функції я додав дію до "wp_loaded", що гарантує завантаження перед тим, як будь-які заголовки надсилаються.

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>

Він позбувся помилки, але повідомлення не врятувало!
Субрата Саркар

6

Ви повинні використовувати wp_redirect() раніше. get_header() Тоді вона не відображатиметься в заголовку помилки.


3
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});

Дякую за допомогу, але цей код не працював для мене. Потрібно додати дію до "wp_loaded", щоб вона працювала (Дивіться мою відповідь)
Snowball

Добре працює, якщо вам потрібно встановити is_page_template()при умовному переадресації.
Беззаконний

1

Ви також можете це зробити

Замість нижнього рядка

wp_redirect ("$ url");

писати

echo("<script>location.href = '".$url."'</script>");

або

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

Це обов'язково вирішить вашу проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.