Ottenere l'ID del post da wp_insert_post()

20 apr 2016, 13:51:16
Visualizzazioni: 18.8K
Voti: 6
$new_post = array(
                        'post_title'    =>      $title,
                        'post_content'  =>      $description,
                        'post_category' =>      array($_POST['cat']),  // Utilizzabile anche per tassonomie personalizzate
                        'tags_input'    =>      array($tags),
                        'post_status'   =>      'publish',           // Scegli: publish, preview, future, draft, ecc.
                        'post_type'     =>      'my_custom_type'
                );
wp_insert_post($new_post);

Come posso ottenere l'ID del post? Viene generato automaticamente? Come posso mostrarlo prima che il form venga inviato? Sto cercando di creare un form frontend dove mostrare all'utente l'ID del post che verrà creato. Tipo "Ehi, stai per pubblicare l'articolo nr # <?php echo $postID;?>". Esiste un modo o sto completamente sbagliando approccio? Grazie in anticipo.

4
Commenti

Dovrai eseguire una query separata per ottenere l'ultimo ID dalla tabella wp_posts. Il nuovo post avrà questo ID, ma fai attenzione, un altro processo in esecuzione contemporanea potrebbe intercettare questo ID e salvare una bozza o un allegato sotto di esso, quindi il nuovo post potrebbe avere un ID diverso da quello che stai visualizzando. Semplicemente non c'è un modo affidabile per conoscere l'ID di un post in anticipo. Devi ricordare che tutti gli allegati, bozze, revisioni e bozze automatiche vengono salvati in wp_posts, quindi non ci saranno due post pubblicati con ID che differiscono di uno. Dovrai rivalutare il tuo approccio.

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

@PieterGoosen Grazie per la tua risposta! Quindi in sostanza, dovrei visualizzare l'ID del post dopo che è stato pubblicato, è corretto?

Kleeia Kleeia
20 apr 2016 14:21:08

wp_insert_post restituisce l'ID del nuovo post quando viene chiamato nella forma $id = wp_insert_post( $new_post );. Forse puoi usare questo fatto per salvare il post come bozza non appena l'utente inizia a digitare e poi chiamare wp_update_post quando invia il modulo, aggiornando lo stato del post in pubblicato.

Luis Sanz Luis Sanz
20 apr 2016 14:37:37

@LuisSanz Grazie mille per questo. Lavorerò su questa soluzione alternativa. Ottimo!

Kleeia Kleeia
20 apr 2016 14:59:43
Tutte le risposte alla domanda 2
2
10

Dovrai eseguire questa operazione in due passaggi. Prima, creerai un articolo in modalità bozza, utilizzando wp_insert_post(). La funzione wp_insert_post stessa ti restituirà l'ID dell'articolo inserito:

<?php
$new_post = array(
    'post_title' => 'Titolo della bozza',
    'post_status'   => 'draft'
    'post_type'     =>      'my_custom_type'
);
$postId = wp_insert_post($new_post);
?>

<form method="post" action="your-action.php">
    <p>Ehi! Stai creando l'articolo #<?php echo $postId; ?></p>
    <input type="hidden" name="draft_id" value="<?php echo $postId; ?>">
    ...
</form>

Successivamente, nella pagina di azione, otterrai l'ID della bozza e aggiornerai l'articolo. Utilizzerai wp_update_post specificando l'ID della bozza.

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

$updated_post = array(
    'ID'            =>      $draftId,
    'post_title'    =>      $title,
    ...
    'post_status'   =>      'publish', // Ora è pubblico
    'post_type'     =>      'my_custom_type'
);
wp_update_post($updated_post);
?>

Spero sia utile :)

20 apr 2016 17:00:00
Commenti

È davvero fantastico!! Grazie @André, stavo proprio cercando qualcosa del genere!

Kleeia Kleeia
20 apr 2016 17:05:10

Benvenuta, @Kleeia ;)

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

Consulta la documentazione:

Ritorno: (int|WP_Error) L'ID del post in caso di successo. Il valore 0 o WP_Error in caso di errore.

Quindi:

$result = wp_insert_post( $data );

if ( $result && ! is_wp_error( $result ) ) {
    $post_id = $result;
    // Fai qualcos'altro
}
20 apr 2016 15:52:45