Obtener el ID de post desde wp_insert_post()

20 abr 2016, 13:51:16
Vistas: 18.8K
Votos: 6
$new_post = array(
                        'post_title'    =>      $title,
                        'post_content'  =>      $description,
                        'post_category' =>      array($_POST['cat']),  // También funciona para taxonomías personalizadas
                        'tags_input'    =>      array($tags),
                        'post_status'   =>      'publish',           // Opciones: publish, preview, future, draft, etc.
                        'post_type'     =>      'my_custom_type'
                );
wp_insert_post($new_post);

¿Cómo puedo obtener el ID del post? ¿Se genera automáticamente? ¿Cómo puedo mostrarlo antes de que se publique el formulario? Estoy intentando crear un formulario en el frontend donde muestre al usuario el ID del post que se va a crear. Algo como "Oye, estás publicando el artículo número # <?php echo $postID;?>". ¿Existe alguna forma de hacer esto o estoy completamente equivocado? Gracias de antemano.

4
Comentarios

Necesitarás ejecutar una consulta separada para obtener el último ID de la tabla wp_posts. La nueva publicación tendrá este ID, pero ten cuidado, otro proceso que se ejecute al mismo tiempo podría interceptar este ID y guardar un borrador o un archivo adjunto bajo él, por lo que la nueva publicación podría tener otro ID diferente al que estás mostrando. Simplemente no hay una manera confiable de conocer el ID de una publicación de antemano. Debes recordar, todos los archivos adjuntos, borradores, revisiones y borradores automáticos se guardan en wp_posts, por lo que no habrá dos publicaciones publicadas con ID's que difieran en uno. Necesitarás reevaluar tu enfoque.

Pieter Goosen Pieter Goosen
20 abr 2016 14:07:01

@PieterGoosen ¡Gracias por tu respuesta! Entonces, básicamente, debería mostrar el ID de la publicación después de que se publique, ¿es correcto?

Kleeia Kleeia
20 abr 2016 14:21:08

wp_insert_post devuelve el ID de la nueva publicación cuando se llama en la forma $id = wp_insert_post( $new_post );. Tal vez puedas usar ese hecho para guardar la publicación como borrador tan pronto como el usuario comience a escribir y luego llamar a wp_update_post cuando envíe el formulario, actualizando el estado de la publicación a publicado.

Luis Sanz Luis Sanz
20 abr 2016 14:37:37

@LuisSanz Muchas gracias por esto. Voy a trabajar en esta solución alternativa. ¡Genial!

Kleeia Kleeia
20 abr 2016 14:59:43
Todas las respuestas a la pregunta 2
2
10

Tendrás que hacer esto en dos pasos. Primero, crearás una publicación en modo borrador, usando wp_insert_post(). La función wp_insert_post te devolverá el ID de la publicación insertada:

<?php
$new_post = array(
    'post_title' => 'Título del borrador',
    'post_status'   => 'draft'
    'post_type'     =>      'my_custom_type'
);
$postId = wp_insert_post($new_post);
?>

<form method="post" action="your-action.php">
    <p>¡Hola! Estás creando la publicación #<?php echo $postId; ?></p>
    <input type="hidden" name="draft_id" value="<?php echo $postId; ?>">
    ...
</form>

Después de eso, en la página de acción, obtendrás el ID del borrador y actualizarás la publicación. Usarás wp_update_post indicando el ID del borrador.

<?php
$draftId = $_POST['draft_id'];
...

$updated_post = array(
    'ID'            =>      $draftId,
    'post_title'    =>      $title,
    ...
    'post_status'   =>      'publish', // Ahora es pública
    'post_type'     =>      'my_custom_type'
);
wp_update_post($updated_post);
?>

Espero que te ayude :)

20 abr 2016 17:00:00
Comentarios

¡¡Esto es genial!! Gracias @André, justo estaba buscando algo así.

Kleeia Kleeia
20 abr 2016 17:05:10

De nada, @Kleeia ;)

André Gumieri André Gumieri
20 abr 2016 17:08:20
0

Consulta la documentación:

Retorno: (int|WP_Error) El ID del post en caso de éxito. El valor 0 o WP_Error en caso de fallo.

Por lo tanto:

$result = wp_insert_post( $data );

if ( $result && ! is_wp_error( $result ) ) {
    $post_id = $result;
    // Haz algo más
}
20 abr 2016 15:52:45