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șteupdate_option(). - Să serializezi singur tabloul cu
serialize()înainte deupdate_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 fi0sau'': dă o valoare implicită clară și compară strict. - Să folosești
'yes'/'no'pentru$autoload: din WordPress 6.7 sunt depreciate; scrietruesaufalse.
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.