Home » Articole » RO » Calculatoare » Dezvoltarea web » WordPress » API pentru date tranzitorii în WordPress

API pentru date tranzitorii în WordPress

postat în: WordPress 0

API pentru date tranzitorii oferă un mod simplu și standardizat de stocare a datelor din cache în baza de date temporar dându-le un nume personalizat și un interval de timp după care vor expira și vor fi șterse.

API pentru date tranzitorii este foarte similar cu API pentru opțiuni, dar cu caracteristica adăugată a unui timp de expirare, care simplifică procesul de utilizare a tabelului bazei de date wp_options pentru stocarea temporară a informațiilor din cache.

Rețineți că funcțiile „site_” sunt în esență aceleași ca și omologii lor, dar funcționează în toată rețeaua atunci când se utilizează WordPress Multisite.

De asemenea, de notat este faptul că datele tranzitorii sunt în mod inerent accelerate de plugin-urile de cache, în timp ce Opțiunile normale nu sunt. Un plugin de cache pentru memorie, de exemplu, ar face ca WordPress să stocheze valorile tranzitorii în memoria rapidă în loc de baza de date. Din acest motiv, tranzientele ar trebui să fie utilizate pentru a stoca orice date care este de așteptat să expire, sau care pot expira în orice moment. De asemenea, tranzientele nu ar trebui niciodată să se presupună ca fiind în baza de date, deoarece ele nu pot fi sub niciun chip depozitate acolo.

Publicul vizat de acest articol include autorii de teme WordPress, autorii de plug-in-uri, și oricine are nevoie să includă în cache date specifice dar vrea să fie actualizate într-un interval de timp dat. Acest document presupune o înțelegere de bază a scripting-ului PHP.

Referință despre funcții

  • Setare/Obținere date tranzitorii: set_transient(), get_transient(), set_site_transient(), get_site_transient()
  • Ștergere date tranzitorii: delete_transient(), delete_site_transient()

Utilizarea datelor tranzitorii

Salvarea datelor tranzitorii

Pentru a salva o dată tranzitorie utilizați set_transient():

set_transient( $transient, $value, $expiration );

$transient – (string) Un identificator unic pentru datele din cache (ar trebui să aibă o lungime maximă de 45 de caractere. NOTĂ: dacă se folosește o dată tranzitorie a site-ului, ar trebui să aibă o lungime maximă de 40 de caractere)

$value – (matrice|obiect) Date pentru salvare, fie o variabilă regulată fie o matrice/obiect. API-ul va gestiona serializarea datelor complexe.

$expiration – (număr întreg) Numărul maxim de secunde pentru a păstra datele înainte de reîmprospătare. Datele tranzitorii pot expira înainte de $expiration (datorită unui cache al unui obiect exterior sau a actualizărilor bazei de date), dar nu va returna niciodată valoarea lor după $expiration.

Deci, de exemplu, pentru a salva obiectul $special_query_results timp de 12 ore:

set_transient( ‘special_query_results’, $special_query_results, 60*60*12 );

Utilizarea constantelor de timp

În WordPress 3.5, au fost introduse mai multe constante pentru a exprima cu ușurință timpul

MINUTE_IN_SECONDS  = 60 (secunde)
HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS
DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS
WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS
YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS

Deci, de exemplu, mostra de cod de mai sus poate fi simplificată:

set_transient( ‘special_query_results’, $special_query_results, 12 * HOUR_IN_SECONDS );

Preluarea datelor tranzitorii

Pentru a salva o dată tranzitorie utilizați get_transient():

get_transient( $transient );

  • $transient este unicul slug utilizat în timpul salvării datei tranzitorii cu set_transient().

În cazul nostru am putut prelua rezultatele noastre de interogare speciale cu:

get_transient( ‘special_query_results’ );

În cazul în care nu există date tranzitorii, sau au expirat, atunci get_transient() va returna false. Acest lucru ar trebui verificat cu ajutorul operatorului de identitate (===) în loc de operatorul de egalitate normal (==), deoarece o valoare întreagă a lui zero (sau alte date ”goale”/”false”) ar putea fi data pe care dorești să o stochezi. Din cauza acestei valori „false”, datele tranzitorii nu ar trebui să fie folosite pentru a stoca valori booleane simple (true/false). Pune-le într-o matrice sau convertește-le la numere întregi mai degrabă.

Exemplu de utilizare:

if ( false === ( $value = get_transient( ‘value’ ) ) ) {
// acest cod rulează când nu există niciun set valid de date tranzitorii
}

Codul de mai sus va obține datas tranzitorie și o va pune în $value. Codul din interiorul blocului if se execută numai atunci când nu există o dată tranzitorie validă pentru a o obține.

Eliminarea datelor tranzitorii salvate

Datele noastre tranzitorii vor muri în mod natural de bătrânețe după ce au trecut $expiration secunde de când s-a rulat ultima dată set_transient(), dar putem forța datele tranzitorii să moară mai devreme de aceasta eliminându-le manual. Acest lucru este util pentru situațiile în care o anumită activitate (economisirea unei postări, adăugarea unei categorii, etc.) va face ca datele din cache să se perimeze în mod inerent și au nevoie de actualizare.

delete_transient( $transient );

  • $transient este numele unic utilizat la salvarea cu set_transient().

În cazul nostru, în mod evident, acest lucru ar fi:

delete_transient( ‘special_query_results’ );

Exemplul complet

Acesta este un exemplu complet despre modul de utilizare a datelkor tranzitorii în cod.

<?php
// Obține orice copie existentă a datelor noastre tranzitorii
if ( false === ( $special_query_results = get_transient( ‘special_query_results’ ) ) ) {
// Nu era acolo, așa că regenerează datele și salvează datele tranzitorii
$special_query_results = new WP_Query( ‘cat=5&order=random&tag=tech&post_meta_key=thumbnail’ );
set_transient( ‘special_query_results’, $special_query_results, 12 * HOUR_IN_SECONDS );
}

// Utilizează datele așa cum ai face în mod normal …
?>

Și un exemplu de utilizare a delete_transient(). În acest caz, vom adăuga o funcție la acțiunea edit_term, care va rula de fiecare dată când o categorie sau etichetă este editată (de exemplu, presupunând că editarea unui termen infirmă datele noastre și dorim să eliminăm versiunea cache).

<?php
// Creează o funcție simplă pentru a șterge datele noastre tranzitorii
function edit_term_delete_transient() {
delete_transient( ‘special_query_results’ );
}
// Adauga funcția la cârligul edit_term astfel încât să ruleze atunci când sunt editate categorii/etichete
add_action( ‘edit_term’, ‘edit_term_delete_transient’ );
?>

Utilizați date tranzitorii cu WP_Query pentru a prelua „posturi recomandate”:

<?php
// Verificați datele tranzitorii. Dacă nu există niciuna, executați WP_Query
if ( false === ( $featured = get_transient( ‘foo_featured_posts’ ) ) ) {

$featured = new WP_Query(
array(
‘category’ => ‘featured’,
‘posts_per_page’ => 5
));

// Puneți rezultatele într-o dată tranzitorie. Expiră după 12 ore.
set_transient( ‘foo_featured_posts’, $featured, 12 * HOUR_IN_SECONDS );
} ?>

// Rulează bucla ca de obicei
<?php if ( $featured->have_posts() ) : ?>

<?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
// s-au găsit postări recomandate, se procedează ca atare
<?php endwhile; ?>

<?php else: ?>
// nu s-a găsit nicio postare recomandată
<?php endif; ?>

<?php wp_reset_postdata(); ?>

Utilizarea datelor tranzitorii în plugin-uri și teme este simplă și adaugă doar câteva linii suplimentare de cod, dar dacă este folosită în situațiile potrivite (interogări de baze de date lungi/costisitoare sau de date complexe prelucrate) se pot salva secunde pe timpurile de încărcare pe site.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *