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 ...

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top