wp_insert_post în WordPress

Creează un articol (sau îl actualizează, dacă dai ID) din cod; wp_update_post() modifică doar câmpurile date.

Sintaxă
wp_insert_post( array $postarr, bool $wp_error = false, bool $fire_after_hooks = true ): int|WP_Error
wp_update_post( array|object $postarr = array(), bool $wp_error = false, bool $fire_after_hooks = true ): int|WP_Error

Ce face wp_insert_post

wp_insert_post() primește un tablou cu datele articolului (post_title, post_content, post_status, post_type…) și îl salvează în baza de date. Dacă tabloul are un ID diferit de zero, actualizează articolul respectiv. Starea implicită este draft, tipul implicit post, iar autorul implicit este utilizatorul curent.

wp_update_post() pornește de la articolul existent și schimbă doar câmpurile pe care le dai, așa că e mai sigură pentru modificări (de exemplu doar post_status). Câmpurile personalizate se pot salva direct cu meta_input (din WordPress 4.4), iar termenii cu tax_input.

Cu $wp_error = true primești un obiect WP_Error la eșec, în loc de 0. Parametrul $fire_after_hooks există din WordPress 5.6. Ambele funcții declanșează save_post: dacă le chemi chiar dintr-un callback save_post, scoate întâi callback-ul, altfel apare o buclă infinită.

Parametri

Parametru Descriere
$postarr Datele articolului: post_title, post_content, post_status (implicit 'draft'), post_type (implicit 'post'), post_author, post_category, meta_input, tax_input, ID.
$wp_error Dacă întoarce WP_Error la eșec. Implicit false (întoarce 0).
$fire_after_hooks Dacă rulează hook-urile de după salvare (wp_after_insert_post). Implicit true.

Ce returnează

ID-ul articolului creat sau actualizat; la eșec 0 sau un WP_Error (cu $wp_error = true).

Exemple

Exemplul 1: Creezi un articol publicat, cu câmp personalizat

--user=ana setează utilizatorul curent în WP-CLI, deci Ana devine autoarea; meta_input salvează prețul odată cu articolul.

wp eval --user=ana '$id = wp_insert_post( array( "post_title" => "Ofertă de toamnă", "post_content" => "Plăcintă cu dovleac la 15 lei.", "post_status" => "publish", "meta_input" => array( "pret" => 15 ) ), true ); echo is_wp_error( $id ) ? $id->get_error_message() : "Articol creat: $id";'

Ieșire în terminal

Articol creat: 128

Exemplul 2: Schimbi doar starea unui articol

wp_update_post() păstrează titlul și conținutul; trimiți doar ID și câmpul de schimbat.

wp eval 'echo wp_update_post( array( "ID" => 128, "post_status" => "draft" ) );'

Ieșire în terminal

128

Exemplul 3: Actualizare din save_post fără buclă infinită

Callback-ul se scoate înainte de wp_update_post() și se pune la loc după; reviziile sunt sărite.

<?php
add_action( 'save_post_produs', 'dex_rezumat_cu_pret' );

function dex_rezumat_cu_pret( $post_id ) {
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }
    $pret = get_post_meta( $post_id, 'pret', true );
    if ( '' === $pret ) {
        return;
    }

    remove_action( 'save_post_produs', 'dex_rezumat_cu_pret' );
    wp_update_post( array(
        'ID'           => $post_id,
        'post_excerpt' => 'Preț: ' . $pret . ' lei',
    ) );
    add_action( 'save_post_produs', 'dex_rezumat_cu_pret' );
}

Greșeli frecvente

  • Te miri că articolul nu apare pe site: post_status implicit este draft. Pune 'publish' dacă vrei să fie public.
  • Chemi wp_update_post() dintr-un callback save_post fără să-l scoți cu remove_action(): funcția declanșează din nou save_post la nesfârșit.
  • Verifici doar is_wp_error() fără $wp_error = true: la eșec funcția întoarce 0, nu un obiect de eroare.
  • Pui text dintr-un formular public direct în post_title; curăță-l (de exemplu cu sanitize_text_field()) și verifică permisiunile înainte.

Comenzi înrudite

  • get_post_meta / update_post_meta: Citește, salvează, adaugă și șterge câmpuri personalizate (post meta) ale unui articol: preț, oraș, cod produs.
  • save_post: Acțiunea care rulează după ce un articol, o pagină sau alt tip de conținut a fost salvat; o folosești pentru câmpuri personalizate.
  • wp post create: Creează un articol, o pagină sau alt tip de conținut, cu titlu, conținut, stare și autor dați ca opțiuni.
  • wp post update: Modifică unul sau mai multe articole existente: titlu, stare, autor, conținut sau câmpuri personalizate.
  • sanitize_text_field: Curăță textul de pe o singură linie primit de la utilizator: elimină HTML-ul, rândurile noi, tab-urile și spațiile în plus.