Comment définir l'Auteur d'un message Je viens de créer avec PHP?
-
22-10-2019 - |
Question
J'utilise PHP pour créer dynamiquement un poste personnalisé, et je dois l'auteur d'être quelqu'un d'autre que l'utilisateur connecté. J'ai trouvé cette https://stackoverflow.com/questions / 5759359 / wordpress-manuellement set-le-auteur-of-a-post en php mais je me demande s'il y a un moyen de le faire après le poste est déjà inséré. Je suppose que je pouvais faire une requête db ...
La solution
Si vous connaissez l'ID de l'auteur, vous pouvez utiliser wp_insert_post spécifiant l'ID et l'ID auteur lui.
$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 );
L'astuce consiste à spécifier l'ID de mettre à jour le poste. Voir wp_insert_post()
.
Autres conseils
Par souci de simplicité et la pertinence entre cette question et une autre question posée sur ( Stack Overflow wordpress - définir manuellement l'auteur d'un message en php - Comme lié par OP ici sur WPSE. ).
WordPress semble forcer une valeur pour la post_author
lors de l'insertion ou la mise à jour à l'aide de messages wp_insert_post()
et wp_update_post()
.
L'inverse est d'utiliser le wp_insert_post_data
crochet de filtre.
/**
* 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 );
Exemple d'utilisation du crochet de filtre 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 );
Cela peut être particulièrement agréable pour insérer ou mettre à jour les messages en utilisant PHP
.
Remarque:. Vous voulez être sûr de désactiver le support pour author
dans votre type post personnalisé et probablement faire preuve de prudence en utilisant toute les fonctions liées à l'auteur dans le cadre de ce type post
Si cela est un type de poste personnalisé et vous ne voulez pas un auteur affecté à un poste, vous pouvez supprimer « auteur » de supports( array )
en register_post_type. http://codex.wordpress.org/Function_Reference/register_post_type
Si vous avez encore besoin d'un soutien de l'auteur pour votre type poste, ce serait beaucoup plus logique de faire tout cela dans post.php / post-new.php en filtrant l'auteur METABOX.
La solution est d'ajouter un ou aucun utilisateur null à la liste déroulante en utilisant WordPress wp_dropdown_users 'show_option_none'
utilisera <option value="-1">
pour votre utilisateur null mais il sera affiché comme 0 dans la db.
* Remarque:. Cet exemple déplace également le droit div auteur au-dessus du bouton de publication
add_action( 'post_submitbox_misc_actions', 'move_author_meta' );
function move_author_meta() {
global $post_ID;
$post = get_post( $post_ID );
echo '<div id="author" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;">Author: ';
better_author_meta_box( $post ); //This function is being called in replace author_meta_box()
echo '</div>';
}
function better_author_meta_box($post) { ?>
<label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label>
<?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'
) );
}
Je suis sûr que vous remarquez tous les contrôles supplémentaires conditionnels pour $ sélectionnés. Il est peut-être exagéré, mais éliminé tous les problèmes avec les éditeurs de ne pas pouvoir changer un auteur à aucun des postes publiés précédents.