Wie benutzt man `wp_insert_user` &` wp_insert_post` gleichzeitig ohne `header sent sent` Fehler?

Ich erstelle ein Frontend-Buchungsformular mit wp_insert_post , das einen Benutzer nach drei grundlegenden Feldern fragt: seinem Vor- und Nachnamen und seiner E-Mail-Adresse. Wenn der Benutzer angemeldet ist, beziehe ich die Textfelder vor und ignoriere sie beim Absenden eines Formulars.

Wenn der Benutzer jedoch nicht angemeldet ist, überprüft meine function, ob die eingegebene E-Mail registriert ist . Wenn dies der Fall ist, greift die function die zugeordnete Benutzer-ID auf und weist diesen Benutzer dem Benutzer post_author zu. Wenn die E-Mail nicht verknüpft ist, wird ein neuer Benutzer über wp_insert_user .

Das Formular gibt diesen Fehler zurück:

 Warning: mysql_real_escape_string() expects parameter 1 to be string, object given in /home/wp-includes/wp-db.php on line 885 Warning: mysql_real_escape_string() expects parameter 1 to be string, object given in /home/wp-includes/wp-db.php on line 885 Warning: Cannot modify header information - headers already sent by (output started at /home/wp-includes/wp-db.php:885) in /home/wp-includes/pluggable.php on line 876 

Was vermisse ich?

 if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "new_post") { // $tags = $_POST['post_tags']; $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $author_email = $_POST['author_email']; $business_name = $_POST['business_name']; $business_city = $_POST['business_city']; $business_state = $_POST['business_state']; $methodgroup = $_POST['methodgroup']; if ( ! is_user_logged_in() ) { if ( email_exists( $author_email ) ) { // email has an account require_once(ABSPATH . WPINC . '/ms-functions.php'); $userid = get_user_id_from_string( $author_email ); } else { // create an account $user_id = wp_insert_user( array ( 'first_name' => $first_name, 'last_name' => $last_name, 'user_email' => $author_email, 'user_login' => $author_email, ) ) ; wp_set_password($last_name, $user_id); } } else { $user_id = get_current_user_id(); } // ADD THE FORM INPUT TO $new_post ARRAY $new_post = array( 'post_title' => 'Project', 'post_status' => 'draft', 'post_type' => 'project', 'post_author' => $user_id, 'business_name' => $business_name, 'business_city' => $business_city, 'business_state' => $business_state, 'methodgroup' => $methodgroup, // Other options // 'ID' => [  ] //Are you updating an existing post? // 'menu_order' => [  ] //If new post is a page, it sets the order in which it should appear in the tabs. // 'comment_status' => [ 'closed' | 'open' ] // 'closed' means no comments. // 'ping_status' => [ 'closed' | 'open' ] // 'closed' means pingbacks or trackbacks turned off // 'pinged' => [ ? ] //? // 'post_author' => [  ] //The user ID number of the author. // 'post_content' => $description, // 'post_date' => [ Ymd H:i:s ] //The time post was made. // 'post_date_gmt' => [ Ymd H:i:s ] //The time post was made, in GMT. // 'post_excerpt' => [  ] //For all your post excerpt needs. // 'post_name' => [  ] // The name (slug) for your post // 'post_parent' => [  ] //Sets the parent of the new post. // 'post_password' => [ ? ] //password for post? // 'post_status' => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] // 'post_type' => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] // 'tags_input' => array($tags), // 'tax_input' => [ array( 'taxonomy_name' => array( 'term', 'term2', 'term3' ) ) ] // support for custom taxonomies. ); //SAVE THE POST $pid = wp_insert_post($new_post, true); //KEEPS OUR COMMA SEPARATED TAGS AS INDIVIDUAL // wp_set_post_tags($pid, $_POST['post_tags']); //REDIRECT TO THE NEW POST ON SAVE $link = get_permalink( $pid ); wp_redirect( $link ); //ADD OUR CUSTOM FIELDS add_post_meta($pid, '_trade_name', $business_name, true); add_post_meta($pid, '_location_1_city', $business_city, true); add_post_meta($pid, '_location_1_state', $business_state, true); add_post_meta($pid, '_method', $methodgroup, true); /* //INSERT OUR MEDIA ATTACHMENTS if ($_FILES) { foreach ($_FILES as $file => $array) { $newupload = insert_attachment($file,$pid); // $newupload returns the attachment id of the file that // was just uploaded. Do whatever you want with that now. } } // END THE IF STATEMENT FOR FILES */ } // END THE IF STATEMENT THAT STARTED THE WHOLE FORM //POST THE POST YO do_action('wp_insert_post', 'wp_insert_post'); 

Das Formular folgt dem VoodooPress- Modell.

Edit: Würde die Verwendung der WP_User-class einen Unterschied machen? Das ist etwas über meinem Programmierkopf, aber ich könnte jemanden finden, der es macht, wenn das eine bessere Lösung wäre.

Solutions Collecting From Web of "Wie benutzt man `wp_insert_user` &` wp_insert_post` gleichzeitig ohne `header sent sent` Fehler?"

Das Header-Problem ist eigentlich das Problem:

Warnung: mysql_real_escape_string () erwartet, dass Parameter 1 ein String ist, Objekt in /home/wp-includes/wp-db.php in Zeile 885

Warnung: mysql_real_escape_string () erwartet, dass Parameter 1 ein String ist, Objekt in /home/wp-includes/wp-db.php in Zeile 885

Sie erhalten diese Fehler, weil Sie irgendwo ein Objekt senden, obwohl Sie es nicht sein sollten. Wenn dieser Fehler gedruckt wird, sendet er Inhalt an den Browser, bevor die Header gesendet werden. Wenn also die Header tatsächlich gesendet werden, erhalten Sie einen Fehler.

Ich sehe leider nicht, wohin Sie ein Objekt schicken. var_dump alle deine Variablen und du solltest das Problem finden.

Beispielsweise.

 $new_post = array( 'post_title' => 'Project', 'post_status' => 'draft', 'post_type' => 'project', 'post_author' => $user_id, 'business_name' => $business_name, 'business_city' => $business_city, 'business_state' => $business_state, 'methodgroup' => $methodgroup ); var_dump($new_post);