wp_redirect “Header bereits gesendet” nach dem Front-End-Formular

Ich versuche zu üben mit der Einrichtung eines Front-End-Post-Formulars. Und ich bekomme diesen Fehler:

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 

ansage-submit.php ist meine Vorlage unten.

Ich habe diese Lösung versucht, aber nicht gehen.

Wenn ich wp_redirect in meinem Code unten verwende, fügt es auch ZWEI Beiträge statt einer ein. Wenn ich es entferne, betritt es nur eins. Jede Hilfe wäre großartig!

Nur für zusätzliche Informationen: Ich benutze Buddypress mit dem Standard-Buddyphema.

  
<input type="text" name="postTitle" id="postTitle" class="required" value="" />
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; } ?>

Solutions Collecting From Web of "wp_redirect “Header bereits gesendet” nach dem Front-End-Formular"

Wie Otto wp_redirect() , senden Sie Daten an den Browser, bevor Sie wp_redirect() aufrufen.

  • get_header() gibt das HTML der Seite aus
  • Sie drucken das gesamte Formular auf die Seite, bevor Sie es verarbeiten.

Um das Problem “Header bereits gesendet” zu beheben, müssen Sie die gesamte Formularverarbeitung vom Ende der Seite an den Anfang der Seite verschieben. Wenn Sie wp_redirect() aufrufen müssen, müssen Sie diesen Aufruf durchführen, bevor Sie etwas – HTML oder etwas anderes – auf die Seite drucken.

Wie für den doppelten wp_insert_post() haben Sie wp_insert_post() zweimal in Ihrem Code:

 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 ); 

Sie versuchen also, bei jedem Laden der Seite einen Post einzufügen, aber wenn nichts eingereicht wurde, wird die $post_information Variable nicht gesetzt und nichts wird eingefügt. Wenn Sie jedoch das Formular senden, erstellen Sie einen neuen Beitrag sowohl innerhalb des Bool-Checks als auch außerhalb des Bool-Checks.

Header bereits gesendet von (Ausgabe gestartet unter /home/sadlight/public_html/members/wp-content/themes/default-child/announcement-submit.php:1)

Die Fehlermeldung sagt Ihnen genau, was Sie wissen müssen.

Die “ansage-submit.php” ist, wo das Problem liegt.

Die “1” ist die Zeilennummer des Problems.

Sie haben also etwas vor Ihrer ersten < ?php Zeile, die die Ausgabe verursacht. Eine leere Zeile, vielleicht. Oder die UTF-8 BOM, vielleicht.

Laden Sie die Datei in einen einfachen Texteditor. Nichts Außergewöhnliches. Notizblock vielleicht. Oder VIM. Stellen Sie sicher, dass vor dem Start des PHP-Tags nichts existiert. Speicher die Datei. Oder überprüfen Sie in Ihrem bevorzugten Editor die Speicheroptionen und vergewissern Sie sich, dass am Anfang der Datei keine Stückliste (Byte-Order-Marker) gespeichert ist.

Dies kann mehrere Ursachen haben. Die Header können nur gesendet werden, wenn davor keine Ausgabe erfolgt. Und mit Ausgabe meine ich jede Ausgabe. Also keine Leerzeichen vor den PHP-öffnenden Tags, kein echo s keine BOM-Zeichen.

Im Grunde sagt diese Fehlermeldung Ihnen genau, wo die Ausgabe gestartet wird, so dass eines der oben genannten Dinge passiert.

Eine vollständige Liste der Dinge, die Sie überprüfen sollten und wie Sie diesen Fehler vermeiden können, finden Sie in diesem übersichtlichen Stack-Überlauf-Post .