get_option / update_option în WordPress

Opțiuni, cache și API WordPress 1.5

Citesc, salvează și șterg setări permanente ale site-ului în tabelul wp_options (Options API).

Sintaxă
get_option( string $option, mixed $default_value = false ): mixed
update_option( string $option, mixed $value, bool|null $autoload = null ): bool
add_option( string $option, mixed $value = '', string $deprecated = '', bool|null $autoload = null ): bool
delete_option( string $option ): bool

Ce face get_option / update_option

Options API este locul în care WordPress și pluginurile își țin setările: titlul site-ului, adresa, setările unei teme. Fiecare opțiune are un nume și o valoare și stă pe un rând din tabelul wp_options. get_option() citește valoarea (sau $default_value dacă opțiunea nu există), update_option() o schimbă și o creează dacă lipsește, add_option() adaugă o opțiune nouă (dar nu o suprascrie pe una existentă), iar delete_option() o șterge.

Tablourile și obiectele sunt serializate automat la salvare și refăcute la citire, deci nu apelezi tu serialize(). Valorile scalare citite din baza de date vin ca șiruri de caractere ("5", nu 5), așa că fă conversia cu (int) când ai nevoie de număr. Argumentul $autoload spune dacă opțiunea se încarcă la fiecare cerere: din WordPress 6.7 se folosesc true / false / null, iar vechile valori 'yes' / 'no' sunt depreciate.

Versiuni din documentație: update_option() și add_option() există din 1.0.0, delete_option() din 1.2.0, get_option() din 1.5.0; argumentul $autoload la update_option() a apărut în 4.2.0. Pune un prefix unic în numele opțiunilor tale (dex_), ca să nu intri în conflict cu alte pluginuri.

Parametri

Parametru Descriere
$option Numele opțiunii (fără escaping SQL). Exemplu: dex_setari_cafenea.
$default_value Doar la get_option(): valoarea întoarsă când opțiunea nu există. Implicit false.
$value Valoarea de salvat. Tablourile și obiectele trebuie să poată fi serializate.
$autoload true = se încarcă la fiecare cerere, false = doar la cerere, null = WordPress decide (la opțiuni noi) sau păstrează setarea existentă.

Ce returnează

get_option() întoarce valoarea opțiunii sau $default_value; update_option(), add_option() și delete_option() întorc true la succes și false altfel (de exemplu când valoarea nouă e identică cu cea veche sau opțiunea există deja la add_option()).

Exemple

Exemplul 1: Setările unei cafenele salvate ca tablou

add_option() creează opțiunea doar prima dată; get_option() o citește cu un tablou gol ca valoare implicită.

<?php
// functions.php din tema copil
add_option( 'dex_setari_cafenea', array(
    'nume'          => 'Cafenea Iași',
    'oras'          => 'Iași',
    'pret_espresso' => 9,
) );

function dex_afiseaza_pret() {
    $setari = get_option( 'dex_setari_cafenea', array() );
    if ( empty( $setari ) ) {
        return;
    }
    echo '<p>' . esc_html( $setari['nume'] ) . ': espresso '
        . esc_html( $setari['pret_espresso'] ) . ' lei</p>';
}
add_action( 'wp_footer', 'dex_afiseaza_pret' );

Ce afișează pagina

<p>Cafenea Iași: espresso 9 lei</p>

Exemplul 2: Un contor salvat fără autoload

Contorul nu e necesar la fiecare cerere, deci îl salvăm cu $autoload = false. Conversia (int) e necesară, pentru că valoarea vine din baza de date ca șir.

<?php
function dex_numara_vizite() {
    if ( is_admin() ) {
        return;
    }
    $vizite = (int) get_option( 'dex_vizite', 0 );
    update_option( 'dex_vizite', $vizite + 1, false );
}
add_action( 'template_redirect', 'dex_numara_vizite' );

Exemplul 3: Verificarea opțiunii din terminal cu WP-CLI

wp option get cu –format=json arată tabloul salvat; caracterele românești apar escapate (\u0219 = ș), așa cum le scrie json_encode.

wp option get dex_setari_cafenea --format=json

Ieșire în terminal

{"nume":"Cafenea Ia\u0219i","oras":"Ia\u0219i","pret_espresso":9}

Greșeli frecvente

  • Să aștepți ca add_option() să schimbe o opțiune existentă: nu o face. Pentru modificare folosește update_option().
  • Să serializezi singur tabloul cu serialize() înainte de update_option(): WordPress îl serializează încă o dată și la citire primești un șir, nu tablou.
  • Să verifici rezultatul cu if ( ! get_option( 'x' ) ) când valoarea poate fi 0 sau '': dă o valoare implicită clară și compară strict.
  • Să folosești 'yes' / 'no' pentru $autoload: din WordPress 6.7 sunt depreciate; scrie true sau false.

Comenzi înrudite

  • set_transient / get_transient: Transients API păstrează temporar un rezultat costisitor (un apel HTTP, o interogare), cu durată de expirare în secunde.
  • wp-config.php: constante: Fișierul de configurare al WordPress: datele bazei de date, prefixul tabelelor, cheile de securitate, adresele site-ului și alte constante.
  • 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.