Как WooCommerce решает проблему с уже отправленными заголовками HTTP? - PullRequest
0 голосов
/ 26 июня 2019

Итак, у меня есть базовый плагин WordPress, который имеет форму в конце администратора.Форма собирает информацию через POST и вставляет запись в базу данных и перенаправляет на страницу редактирования созданного объекта.

Шаг 1: получить поля объекта из массива POST

Шаг 2: вставить кодв базу данных, используя $ wpdb

Шаг 3: если вставка прошла успешно, перенаправление на https://example.com


if( isset($_POST['submit'])){
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];

    $result = $wpdb->insert('table', array('first_name' => $first_name, 'last_name' => $last_name), array('%s','%s'));

    if($result){
        $url = "https://example.com/";
        header("Location: $url");
        die();
    }else{
        echo "Error inserting record in table";
    }
}

Теперь ожидаемый результат заключается в том, что страница должна перенаправить на https://example.com науспешная вставка объекта в базу данных.Но я получаю сообщение об ошибке «Заголовки уже отправлено в PHP».

Интересно, что если я установлю и активирую woocommerce в WordPress, ошибка исчезнет, ​​и ожидаемый результат будет достигнут.

Мне интереснокак это делает woocommerce.

1 Ответ

0 голосов
/ 26 июня 2019

Когда вы используете функцию header(), вы можете получить подобные предупреждения в WP. Всегда лучше использовать wp_redirect() вместо:

wp_redirect( 'https://example.com/' );
exit;

Обновление:

  1. Ваша функция, содержащая данные отправки / изменения заголовка (например, wp_redirect, header() и т. Д.), Должна быть вызвана до того, как WP выполнит какой-либо вывод. Может быть, вы можете проверить помещение своей функции и связанного с ней хука в другую функцию, которая связана с init или admin_init хуками действия?

  2. Убедитесь, что ни в одном из ваших файлов плагинов нет пробелов или строк перед открывающим тегом PHP (<?php)

...