Pregunta

Estoy usando PHP para crear dinámicamente una publicación personalizada, y necesito que el autor sea alguien que no sea el usuario iniciado. encontré esto https://stackoverflow.com/questions/5759359/wordpress-manation-set-the-author-of-a-post-in-php Pero me pregunto si hay una manera de hacerlo después de que la publicación ya está insertada. Supongo que podría hacer una consulta de DB ...

¿Fue útil?

Solución

Si conoce la ID del autor, puede usar WP_INSERT_POST especificando la ID y la ID del autor.

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

El truco es especificar la ID para actualizar la publicación. Ver wp_insert_post().

Otros consejos

Por simplicidad y relevancia entre esta pregunta y otra pregunta que se hace en Desbordamiento de pila (WordPress - Establezca manualmente al autor de una publicación en PHP - según lo vinculado por OP aquí en WPSE.).

WordPress parece forzar un valor para el post_author Al insertar o actualizar publicaciones usando wp_insert_post() y wp_update_post().

El camino es usar el gancho del filtro 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 );

Ejemplo de uso del gancho de filtro 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 );

Esto puede ser particularmente bueno para insertar o actualizar publicaciones usando PHP.

Nota: Querrá asegurarse de deshabilitar el soporte para author en su tipo de publicación personalizada y probablemente sea cauteloso utilizando cualquier funciones relacionadas con el autor dentro del alcance de este tipo de publicación.

Si este es un tipo de publicación personalizado y no desea que un autor asignado a una publicación pueda eliminar el 'autor' de supports( array ) en registro_post_type. http://codex.wordpress.org/function_reference/register_post_type

Si aún necesita soporte de autor para su tipo de publicación, esto tendría mucho más sentido para hacer esto en post.php / post-new.php filtrando el metabox del autor.

La solución es agregar un usuario no o nulo al menú desplegable usando wp_dropdown_users 'show_option_none' WordPress usará <option value="-1"> Para su usuario nulo, pero aparecerá como 0 en el DB.

*Nota: este ejemplo también mueve el Div del autor justo encima del botón Publicar.

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

Estoy seguro de que nota todos los cheques condicionales adicionales por $ seleccionados. Puede ser exagerado, pero eliminó cualquier problema con los editores que no pudieran cambiar a un autor a ninguno de publicaciones publicadas anteriores.

Licenciado bajo: CC-BY-SA con atribución
scroll top