get_post_meta / update_post_meta în WordPress

Citește, salvează, adaugă și șterge câmpuri personalizate (post meta) ale unui articol: preț, oraș, cod produs.

Sintaxă
get_post_meta( int $post_id, string $key = '', bool $single = false ): mixed
update_post_meta( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' ): int|bool
add_post_meta( int $post_id, string $meta_key, mixed $meta_value, bool $unique = false ): int|false
delete_post_meta( int $post_id, string $meta_key, mixed $meta_value = '' ): bool

Ce face get_post_meta / update_post_meta

Câmpurile personalizate (post meta) sunt perechi cheie–valoare atașate unui articol, păstrate în tabelul wp_postmeta. get_post_meta() le citește, update_post_meta() setează o valoare (o creează dacă nu există), add_post_meta() adaugă încă o valoare pentru aceeași cheie, iar delete_post_meta() șterge cheia.

Cu $single = true, get_post_meta() întoarce o singură valoare; cu false (implicit) întoarce un tablou cu toate valorile cheii. Valorile simple vin înapoi ca șiruri (25 devine "25", true devine "1"), iar tablourile și obiectele se salvează serializate și revin cu tipul lor.

Cheile care încep cu _ (de exemplu _dex_pret) sunt considerate protejate și nu apar în caseta „Câmpuri personalizate” din editor. Valorile trec prin stripslashes() la salvare: pentru JSON sau text cu backslash folosește wp_slash().

Parametri

Parametru Descriere
$post_id ID-ul articolului.
$key / $meta_key Cheia câmpului. La get_post_meta(), fără cheie primești toate câmpurile articolului.
$single get_post_meta(): true întoarce o valoare, false (implicit) un tablou. Nu are efect fără $key.
$meta_value Valoarea de salvat; tablourile și obiectele se serializează automat.
$prev_value update_post_meta(): actualizează doar intrările care au această valoare veche. Implicit toate.
$unique add_post_meta(): cu true nu adaugă dacă cheia există deja. Implicit false.

Ce returnează

get_post_meta(): valoarea (cu $single) sau un tablou; șir gol / tablou gol dacă cheia lipsește; false pentru un ID invalid. update_post_meta(): ID-ul noului meta dacă cheia nu exista, true la actualizare, false la eșec sau dacă valoarea era aceeași. add_post_meta(): ID-ul meta sau false. delete_post_meta(): true sau false.

Exemple

Exemplul 1: Salvezi un preț și îl citești înapoi

Numărul 25 se întoarce ca șirul "25"; pentru calcule îl convertești cu (int) sau (float).

wp eval 'update_post_meta( 42, "pret", 25 ); var_dump( get_post_meta( 42, "pret", true ) );'

Ieșire în terminal

string(2) "25"

Exemplul 2: Mai multe valori pentru aceeași cheie

add_post_meta() adaugă rânduri separate; fără $single primești tabloul tuturor valorilor.

wp eval 'add_post_meta( 42, "oras", "Iași" ); add_post_meta( 42, "oras", "Cluj" ); print_r( get_post_meta( 42, "oras" ) );'

Ieșire în terminal

Array
(
    [0] => Iași
    [1] => Cluj
)

Exemplul 3: Afișezi câmpul în șablon

Verifici dacă valoarea există (șirul gol e fals) și o escapezi la afișare.

<?php
$pret = get_post_meta( get_the_ID(), 'pret', true );
if ( $pret ) {
    echo '<p class="pret">' . esc_html( $pret ) . ' lei</p>';
}

Ce afișează pagina

<p class="pret">25 lei</p>

Greșeli frecvente

  • Uiți true ca al treilea argument și primești Array în pagină în loc de valoare.
  • Tratezi false de la update_post_meta() ca eroare: îl primești și când valoarea nouă e identică cu cea salvată.
  • Salvezi JSON cu update_post_meta() și backslash-urile dispar; trece valoarea prin wp_slash().
  • Folosești chei fără prefix (pret) într-un plugin public: alt plugin poate folosi aceeași cheie. Un prefix (dex_pret) evită conflictele.

Comenzi înrudite

  • wp_insert_post: Creează un articol (sau îl actualizează, dacă dai ID) din cod; wp_update_post() modifică doar câmpurile date.
  • 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_Query: Clasa care interoghează articole, pagini și tipuri personalizate după criterii: tip, categorie, câmpuri, ordine, paginare.
  • get_option / update_option: Citesc, salvează și șterg setări permanente ale site-ului în tabelul wp_options (Options API).