wp_redirect "уже отправлены" после формы отправки переднего плана

Я пытаюсь тренироваться с созданием формы отправки сообщения переднего плана. И я получаю эту ошибку:

Warning: Cannot modify header information - headers already sent by (output started at /home/sadlight/public_html/members/wp-content/themes/default-child/announcement-submit.php:1) in /home/sadlight/public_html/members/wp-includes/pluggable.php on line 876 

Объявление-submit.php – это мой шаблон ниже.

Я пробовал это решение , но не пошел.

Кроме того, когда я использую wp_redirect в моем коде ниже, он вставляет TWO сообщения вместо одного. Когда я удаляю его, он входит только в один. Любая помощь будет замечательной!

Просто для дополнительной информации: я использую buddypress с темой buddypress по умолчанию.

 <?php /* * Template Name: Announcement Submit */ $postTitleError = ''; if ( isset( $_POST['submitted'] ) ) { if ( trim( $_POST['postTitle'] ) === '' ) { $postTitleError = 'Please enter a title.'; $hasError = true; } } get_header(); ?> <div id="content"> <div class="padder"> <form action="" id="primaryPostForm" method="POST"> <fieldset> <label for="postTitle"><?php _e('Post Title:', 'framework') ?></label> <input type="text" name="postTitle" id="postTitle" class="required" value="<?php if ( isset( $_POST['postTitle'] ) ) echo esc_attr( stripslashes( $_POST['postTitle'] ) ); ?>" /> </fieldset> <fieldset> <?php wp_editor( 'Testing some content', 'postcontent'); ?> </fieldset> <fieldset> <?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?> <input type="hidden" name="submitted" id="submitted" value="true" /> <button type="submit"><?php _e('Add Post', 'framework') ?></button> </fieldset> </form> <?php if ( $postTitleError != '' ) { ?> <span class="error"><?php echo $postTitleError; ?></span> <div class="clearfix"></div> <?php } ?> <?php if ( isset( $_POST['submitted'] ) && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' ) ) { if ( trim( $_POST['postTitle'] ) === '' ) { $postTitleError = 'Please enter a title.'; $hasError = true; } $post_information = array( 'post_title' => wp_strip_all_tags( $_POST['postTitle'] ), 'post_content' => wp_kses_post( $_POST['postcontent'] ), 'post_type' => 'post', 'post_status' => 'pending' ); wp_insert_post( $post_information ); } $post_id = wp_insert_post( $post_information ); if ( $post_id ) { wp_redirect( home_url() ); exit; } ?> </div><!-- .padder --> </div><!-- #content --> <?php get_sidebar(); ?> <?php get_footer(); ?> 

Solutions Collecting From Web of "wp_redirect "уже отправлены" после формы отправки переднего плана"

Как отметил Отто, вы отправляете данные в браузер перед вызовом wp_redirect() .

  • get_header() выведет HTML страницы <head>
  • Перед его обработкой вы печатаете всю форму на странице.

Чтобы исправить проблему с «заголовками, уже отправленными», вам нужно переместить всю свою обработку формы из нижней части страницы в начало страницы. Если вам нужно вызвать wp_redirect() вы должны сделать этот вызов перед тем, как распечатать что-либо – HTML или что-нибудь еще – на странице.

Что касается wp_insert_post() записи сообщения, у вас есть wp_insert_post() два раза в вашем коде:

 if ( isset( $_POST['submitted'] ) && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' ) ) { if ( trim( $_POST['postTitle'] ) === '' ) { $postTitleError = 'Please enter a title.'; $hasError = true; } $post_information = array( 'post_title' => wp_strip_all_tags( $_POST['postTitle'] ), 'post_content' => wp_kses_post( $_POST['postcontent'] ), 'post_type' => 'post', 'post_status' => 'pending' ); wp_insert_post( $post_information ); } $post_id = wp_insert_post( $post_information ); 

Поэтому вы пытаетесь вставить сообщение на каждую загрузку страницы, но если ничего не было отправлено, переменная $post_information не будет установлена ​​и ничего не будет вставлено. Однако, когда вы отправляете форму, вы создаете новую запись как внутри проверки bool, так и вне проверки bool.

заголовки, уже отправленные (вывод начинается с /home/sadlight/public_html/members/wp-content/themes/default-child/announcement-submit.php:1)

Сообщение об ошибке сообщает вам, что именно вам нужно знать.

Проблема с объявлением-submit.php.

«1» – номер строки проблемы.

Итак, у вас есть что-то перед вашей начальной линией <?php которая вызывает вывод. Возможно, пустая строка. Или, возможно, спецификация UTF-8.

Загрузите файл в текстовый редактор. Ничего особенного. Возможно, Блокнот. Или VIM. Убедитесь, что перед тем, как запустить PHP-тег, ничего не существует. Сохраните файл. Или, в своем редакторе выбора, проверьте параметры сохранения и убедитесь, что он не настроен на сохранение спецификации (Byte-Order-Marker) в начале файла.

Это может иметь несколько причин. Заголовки можно отправлять только тогда, когда перед ним нет выхода. И с выходом я подразумеваю любой выход. Таким образом, нет пробелов перед открытием PHP-тегов, никаких echo сигналов нет BOM-символов.

В основном это сообщение об ошибке сообщает вам, где именно начинается выход, так что происходит одна из вышеперечисленных вещей.

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