Obține ID-ul postării din wp_insert_post()

20 apr. 2016, 13:51:16
Vizualizări: 18.8K
Voturi: 6
$new_post = array(
                        'post_title'    =>      $title,
                        'post_content'  =>      $description,
                        'post_category' =>      array($_POST['cat']),  // Utilizabil și pentru taxonomii personalizate
                        'tags_input'    =>      array($tags),
                        'post_status'   =>      'publish',           // Alege: publish, preview, future, draft, etc.
                        'post_type'     =>      'my_custom_type'
                );
wp_insert_post($new_post);

Cum pot obține ID-ul postării? Este generat automat? Cum pot să-l afișez înainte ca formularul să fie trimis? Încerc să creez un formular în frontend unde să afișez utilizatorului ID-ul postării care va fi creată. Ceva de genul "Hei, vei posta articolul nr # <?php echo $postID;?>". Există vreo metodă sau sunt total pe lângă? Mulțumesc anticipat.

4
Comentarii

Va trebui să executați o interogare separată pentru a obține ultimul ID din tabelul wp_posts. Noul articol va avea acest ID, dar fiți atenți, un alt proces care rulează în același timp ar putea intercepta acest ID și salva o schiță sau un atașament sub el, așa că noul articol ar putea avea un alt ID decât cel pe care îl afișați. Pur și simplu nu există o metodă sigură de a ști un ID de articol înainte. Trebuie să rețineți că toate atașamentele, schițele, reviziile și schițele automate sunt salvate în wp_posts, așa că nu există două articole publicate care să aibă ID-uri cu o diferență de unu. Va trebui să re-evaluați abordarea dumneavoastră.

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

@PieterGoosen Vă mulțumesc pentru răspuns! Deci, practic, ar trebui să afișez ID-ul articolului după ce acesta este publicat, este corect?

Kleeia Kleeia
20 apr. 2016 14:21:08

wp_insert_post returnează ID-ul noului articol atunci când este apelat sub forma $id = wp_insert_post( $new_post );. Poate puteți folosi acest fapt pentru a salva articolul ca schiță imediat ce utilizatorul începe să tasteze și apoi să apelați wp_update_post când el trimite formularul, actualizând starea articolului la publicat.

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

@LuisSanz Mulțumesc mult pentru asta. O să lucrez la această soluție temporară. Excelent!

Kleeia Kleeia
20 apr. 2016 14:59:43
Toate răspunsurile la întrebare 2
2
10

Va trebui să faceți acest lucru în doi pași. Mai întâi, veți crea un articol în modul ciornă, folosind wp_insert_post(). Funcția wp_insert_post însăși vă va returna ID-ul articolului inserat:

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

<form method="post" action="your-action.php">
    <p>Hei! Creezi articolul #<?php echo $postId; ?></p>
    <input type="hidden" name="draft_id" value="<?php echo $postId; ?>">
    ...
</form>

După aceea, în pagina de acțiune, veți obține ID-ul ciornei și veți actualiza articolul. Veți folosi wp_update_post specificând ID-ul ciornei.

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

$updated_post = array(
    'ID'            =>      $draftId,
    'post_title'    =>      $title,
    ...
    'post_status'   =>      'publish', // Acum este public
    'post_type'     =>      'my_custom_type'
);
wp_update_post($updated_post);
?>

Sper că vă ajută :)

20 apr. 2016 17:00:00
Comentarii

Este foarte tare!! Mulțumesc @André, tocmai căutam ceva de genul acesta!

Kleeia Kleeia
20 apr. 2016 17:05:10

Bine ai venit, @Kleeia ;)

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

Verifică documentația:

Returnează: (int|WP_Error) ID-ul postului în caz de succes. Valoarea 0 sau WP_Error în caz de eșec.

Astfel:

$result = wp_insert_post( $data );

if ( $result && ! is_wp_error( $result ) ) {
    $post_id = $result;
    // Fă altceva
}
20 apr. 2016 15:52:45