Wie kann ich den Postautor eines Posts einstellen, den ich gerade mit PHP erstellt habe?

Ich benutze PHP, um dynamisch einen benutzerdefinierten Beitrag zu erstellen, und ich brauche den Autor als jemand anderen als der angemeldete Benutzer. Ich habe dieses https://stackoverflow.com/questions/5759359/wordpress-manual-set-the-author-of-a-post-in-php gefunden, aber ich frage mich, ob es einen Weg gibt, es nach dem Post zu tun ist bereits eingefügt. Ich denke, ich könnte einfach eine db-Abfrage machen …

Solutions Collecting From Web of "Wie kann ich den Postautor eines Posts einstellen, den ich gerade mit PHP erstellt habe?"

Wenn Sie die ID des Autors kennen, können Sie wp_insert_post verwenden, indem Sie die ID und die Autor-ID angeben.

$id = $post->ID; // change this to whathever $user_id = '4'; // change this too $the_post = array(); $the_post['ID'] = $id; $the_post['post_author'] = $user_id; wp_insert_post( $the_post ); 

Der Trick besteht darin, die ID anzugeben, um den Post zu aktualisieren. Siehe wp_insert_post() .

Zur Vereinfachung und Relevanz zwischen dieser Frage und einer anderen Frage auf Stack Overflow gestellt ( WordPress – manuell den Autor eines Beitrags in PHP setzen – wie von OP hier auf WPSE verlinkt.).

WordPress scheint einen Wert für den post_author zu erzwingen, während Posts mit wp_insert_post() und wp_update_post() post_author oder aktualisiert werden.

Der Weg ist es, den Filter Hook wp_insert_post_data .

 /** * Filter slashed post data just before it is inserted into the database. * * @since 2.7.0 * * @param array $data An array of slashed post data. * @param array $postarr An array of sanitized, but otherwise unmodified post data. */ $data = apply_filters( 'wp_insert_post_data', $data, $postarr ); 

Beispiel Verwendung des Filter wp_insert_post_data :

 function remove_author_id( $data, $postarr ) { if ( $data['post_type'] != 'YOUR-POST-TYPE-HERE' ) { return $data; } $data['post_author'] = 0; return $data; } add_filter( 'wp_insert_post_data', 'remove_author_id', '99', 2 ); 

Dies kann besonders nützlich für das Einfügen oder Aktualisieren von Posts mit PHP .

Hinweis: Sie sollten sicherstellen, dass die Unterstützung für den author in Ihrem benutzerdefinierten Post-Typ deaktiviert ist, und Sie sollten vorsichtig sein, wenn Sie im Zusammenhang mit diesem Post-Typ autorbezogene functionen verwenden.

Wenn dies ein benutzerdefinierter Post-Typ ist und Sie nicht möchten, dass ein Autor einem Beitrag zugewiesen wird, können Sie “author” von supports( array ) in register_post_type entfernen. http://codex.wordpress.org/Function_Reference/register_post_type

Wenn Sie noch Autorenunterstützung für Ihren Post-Typ benötigen, wäre es viel sinnvoller, dies einfach in post.php / post-new.php zu tun, indem Sie die Author-Metabox filtern.

Die Lösung besteht darin, einen None- oder Null-Benutzer zum Dropdown hinzuzufügen 'show_option_none' indem wp_dropdown_users 'show_option_none' WordPress für Ihren 'show_option_none' aber in der db als 0 angezeigt wird.

* Hinweis: In diesem Beispiel wird auch der Autor div direkt über die Schaltfläche zum Veröffentlichen verschoben.

 add_action( 'post_submitbox_misc_actions', 'move_author_meta' ); function move_author_meta() { global $post_ID; $post = get_post( $post_ID ); echo '
Author: '; better_author_meta_box( $post ); //This function is being called in replace author_meta_box() echo '
'; } function better_author_meta_box($post) { ?> < ?php if ( 'auto-draft' == $post->post_status ) : $selected = false; elseif ( $post->post_author == 0 || ( ! $post->post_author) ) : $selected = -1; else : $selected = $post->post_author; endif; wp_dropdown_users( array( 'who' => 'authors', 'name' => 'post_author_override', 'selected' => $selected ? $selected : (int) -1, 'include_selected' => true, 'show_option_none' => 'NONE', 'orderby' => 'display_name', 'show' => 'display_name', 'order' => 'ASC' ) ); }

Ich bin sicher, Sie bemerken alle zusätzlichen bedingten Schecks für $ ausgewählt. Es könnte zu viel werden, aber Probleme mit Redakteuren, die einen Autor von früheren veröffentlichten Beiträgen nicht ändern konnten, wurden beseitigt.