Utilizarea WordPress pentru dezvoltarea aplicațiilor web Caracteristici Interogări personalizate cu WP_Query

Ne-am uitat la modul în care WordPress poate fi folosit ca bază pentru dezvoltarea aplicațiilor, dar unul dintre lucrurile pe care trebuie încă să le acoperem că cele mai moderne oferte de cadre este cum să interogăm baza de date pentru a obține rezultate pentru orice vizualizare dată.

În mod specific, nu am vorbit despre cum să obținem informații din baza de date și să le inserăm în paginile noastre.

Dacă sunteți familiarizat cu alte cadre, atunci probabil că sunteți familiarizat cu un sistem de mapare obiect-relațional (ORM).

Pentru cei care nu sunt familiarizați cu ORM, în esență, este o bucată de software care se află între aplicație și baza de date și ne permite să preluăm rânduri și coloane ca obiecte, să le tratăm ca atare și să le serializăm înapoi la baza de date.

Sunt lucruri foarte interesante. Cu toate acestea, WordPress nu nu oferă această flexibilitate.

În schimb, există un set de API pe care le oferă, care ne permit să facem modificări în baza de date. Există o serie de API-uri care sunt disponibile pentru noi, fiecare dintre care vom explora acest set final de articole.

În primul rând, ne vom uita la WP_Query. Apoi, vom arunca o privire WP_User_Query, urmată de $ wpdb obiect care este disponibil ca a global în WordPress.

Dar mai mult despre asta mai târziu. Acum, la WP_Query.


Interogarea bazei de date WordPress

Înainte de a începe să vorbim despre interogarea bazei de date WordPress, cred că este esențial să subliniem exact ce înseamnă acest lucru, de ce este important și ce implică.

Dacă nu altceva, aceasta este menită să asigure așteptări pentru cititori, indiferent de nivelul dvs. de experiență.

1. Ce înseamnă asta??

Interogarea bazei de date WordPress reprezintă exact ceea ce v-ați aștepta: extragerea informațiilor din baza de date pe care rulează WordPress.

Nu este nimic complicat în legătură cu asta. Totuși, acolo sunteți mai multe moduri diferite de a face acest lucru și este important să știți cum să faceți acest lucru și ce să evitați.

În general, există trei API-uri disponibile și recomandate pentru utilizarea noastră, și câteva care sunt disponibile, dar sunt nu recomandat pentru utilizare.

În această serie de articole, vom acoperi toate acestea.

2. De ce este important acest lucru?

Dacă nu este nimic altceva, acest lucru este important pentru a înțelege modalitățile adecvate de a prelua și de a stoca informațiile în baza de date în cele mai sigure și mai sigure moduri.

Amintiți-vă: în programare, doar pentru că ceva funcționează nu înseamnă că este cel mai bun mod de a face acest lucru.

În acest scop, vom examina modalitățile recomandate de WordPress pentru recuperarea și salvarea datelor direct din și către baza de date.

La urma urmei, dorim să ne asigurăm că nu numai că construim aplicații robuste, dar și aplicații sigure și eficiente.

3. Ce înseamnă acest lucru?

Ca și în majoritatea cazurilor, implică învățarea unui API. Cel puțin, acesta este cazul pentru două dintre tipurile de interogări.

Pentru articolul final, este necesar să știi sau să ai o dorință de a învăța, SQL (ca WordPress face vă permite să scrieți interogări brute împotriva bazei de date). Dar mai mult despre asta mai târziu.

Pentru moment, vom fi pur și simplu concentrați pe API-uri, parametrii disponibili și cum / când să le folosim în activitatea noastră.


Introducerea WP_Query

Deși puteți citi totul WP_Query în Codex-ul WordPress, cred că merită să distrugem câteva din cele mai fine lucruri din acest articol, mai ales dacă sunteți nou în WordPress sau dacă aveți în vedere serios scrierea de aplicații utilizând WordPress.

Codul definește WP_Query cum ar fi:

WP_Query este o clasă ... care se ocupă de complexitatea unei solicitări de postări (sau pagini) către un blog WordPress. Wp-blog-header.php ... dă informația obiectului $ wp_query definind cererea curentă, iar apoi $ wp_query determină tipul de interogare cu care se ocupă (eventual o arhivă de categorie, arhivă dată, feed sau căutare) și preia posturi solicitate. Păstrează multe informații despre cerere, care pot fi trase la o dată ulterioară.

Incredibil de tehnic, corect?

Iată cum să ne gândim la aceasta din perspectiva consumatorului:

  • WP_Query extrage informații despre postări, pagini, alte tipuri de posturi personalizate și date arhivate și face informațiile necesare despre aceste date disponibile.

Din perspectiva dezvoltării, gândiți-vă astfel:

  • WP_Query este o modalitate de a prelua informații despre tipurile de posturi și datele arhivate, precum și datele meta asociate acestora și multe altele. Informațiile preluate pot fi citite, manipulate, salvate și / sau afișate în fișierele șablon.

Pe scurt, WP_Query oferă un mod standard pentru ca noi să interogăm baza de date în mod specific în jurul postărilor, paginilor, tipurilor personalizate de posturi și a datelor asociate acestora, astfel încât să putem lucra mult mai ușor cu magazinele WordPress.

Notă: Dacă căutați informații despre gestionarea utilizatorilor sau despre scrierea de interogări SQL personalizate, așteptați până la următoarea serie de articole, deoarece vom acoperi aceste informații în detaliu în acel moment.

Cum se utilizează WP_Query

Bine, așa că am acoperit ce WP_Query este, de ce este benefic și cum ar trebui să fie folosit, dar acest lucru merge doar până acum.

În acest moment, este timpul să aruncăm o privire asupra parametrilor care pot fi transmiși WP_Query și câteva exemple practice de utilizare a acesteia.

Primul, WP_Query pot lua argumente pentru: autori, categorii, etichete, taxonomii, interogări generale de căutare, mesaje, pagini, tipuri personalizate de posturi, stare, paginare, ordine de înregistrare, date, câmpuri personalizate, permisiuni,.

Pe scurt, pot fi preluate orice informații legate de tipurile de postări, tagurile categoriilor și meta-datele acestora WP_Query.

Un cuvânt despre buclă

Dacă te-ai uitat la orice WordPress temă de cod, sau a lucrat cu WordPress în orice capacitate înainte de a citi acest articol, atunci este foarte probabil ați văzut cod ca acesta:

  

Și, în WordPress, aceasta este ceea ce este cunoscut sub numele de The Loop.

Pe scurt, loop-ul este locul în care totul se întâmplă deoarece se referă la afișarea informațiilor preluate dintr-o interogare.

În acest scop, dacă scrieți o interogare utilizând WP_Query, atunci probabil veți folosi aceeași structură pentru propria dvs. activitate.

Dar vom vedea mai multe despre asta într-un moment.

Exemple practice

Noțiuni de bază cu WP_Query este usor. De exemplu, să presupunem că dorim să setăm un șablon care să afișeze toate postările pentru un singur autor.

Pentru a face acest lucru, putem folosi ID-ul autorului. Deci, să spunem că dorim să preluăm toate postările, paginile și conținutul scrise de autor cu ID-ul "1".

  1); $ my_query = noua valoare WP_Query ($ args);

Și apoi vrem să repetăm:

 dacă ($ my_query-> have_posts ()) în timp ce ($ my_query-> have_posts ()) // Lucrează cu postul autorului 1 // Vorbim despre acest rând următor în articolul wp_reset_postdata (); 

Destul de ușor, corect?

Dar să facem ceva mai complicat. Să presupunem că dorim doar să preluăm posturile de la acel autor care intră în categoria postului personalizat "Fotografie" și care au fost publicate în 2013.

Pentru a face acest lucru, vom transmite aceste informații:

  1 'post_type' => 'fotografie' date_query '=> array (' 2013 ')); $ my_query = nou WP_Query ($ args);

Și apoi iterați prin interogarea de mai jos:

 dacă $ my_query-> have_posts ()) în timp ce ($ my_query-> have_posts ()) // Lucrează cu postările returnate // // Vorbim despre acest rând următor în articolul wp_reset_postdata (); 

Dar poate deveni un pic mai complex în funcție de informațiile pe care le avem la dispoziție în orice moment în timpul ciclului de viață al aplicației.

De exemplu, să presupunem că vrem să creăm în mod programatic un tip de post personalizat, cu un anumit titlu și un slug, dar numai dacă nu există deja.

Există trei pași pentru a face acest lucru:

  1. Transmite argumentele necesare clasei
  2. Rulați prin The Loop în căutarea oricăror postări care ar putea exista
  3. Dacă postul nu există, creați-l

Iată cum puteți face acest lucru:

 // Căutați tipul postului specificat și cuvintele care sunt publicate sau sunt în coșul de gunoi $ args = array ('post_type' => $ post_type, 'post_name' => $ slug, 'post_status' => 'Gunoi' ) ); $ post_type_query = noua valoare WP_Query ($ args); // O postare cu acele informații există deja, apoi se elimină din coșul de gunoi dacă ($ post_type_query-> have_posts ()) while ($ post_type_query-> have_posts ()) $ post_type_query-> the_post (); // Dacă postul este găsit în coșul de gunoi, restabili-l dacă ('trash' == strtolower (get_post_status (get_the_ID ()))) $ page = get_page (get_the_ID ()); $ page-> post_status = 'publica'; wp_update_post (pagina $);  // Dacă o postare nu există deja cu titlul specificat, creați-l dacă null == acme_get_permalink_by_slug ($ slug, $ post_type)) $ page_id = wp_insert_post (array ('comment_status' => , 'ping_status' => 'închis', 'post_author' => 1, // Administratorul creează pagina 'post_title' => $ title, 'post_name' => strtolower ($ slug), 'post_status' => ',' post_type '=> strtolower ($ post_type)); // Dacă un șablon este specificat în argumentele funcției, să îl aplicăm dacă (null! = $ Template) update_post_meta (get_the_ID (), '_wp_page_template', $ template);  // Vorbim despre această linie mai târziu în articolul wp_reset_postdata ();

După cum puteți spune, puteți face unele întrebări cu adevărat puternice și faceți o muncă cu adevărat inteligentă cu WordPress și WP_Query dacă știți cum să gestionați corect parametrii.

Acum, în codul de mai sus, când căutăm să găsim dacă postul există deja în coșul de gunoi, acolo sunteți metode mai optime de a scrie o interogare pentru a verifica acest lucru; cu toate acestea, codul de mai sus este menit să demonstreze mai mult un exemplu de utilizare a acestuia WP_Query decât orice altceva.

Pe măsură ce ajungem mai departe în acest subiect de scriere a interogărilor, vom vedea alte metode de recuperare mai rapidă a informațiilor (cum ar fi utilizarea SQL-ului brut pentru SELECTAȚI declarații și ȘTERGE sau ACTUALIZAȚI declaraţii).

În acest scop, vă recomand să vă familiarizați cu toți parametrii pe care îi acceptă. Deși există o mulțime de opțiuni (ceea ce este un lucru bun, după părerea mea), există un mod relativ standard de a le transmite astfel încât mulți dintre ei să se comporte la fel ca ceilalți.

Asta înseamnă că odată ce ați învățat câteva dintre ele, atunci este ușor să ridicați restul.

În plus, dacă sunteți într-adevăr în înțelegerea interogărilor un pic mai mult, vă recomandăm să aruncați o privire la modul în care parametrii corespund cu datele din baza de date de bază.

Când să utilizați WP_Query

Desigur, aceasta ridică problema cand ar trebui să utilizați WP_Query.

La urma urmei, WordPress are propria sa ierarhie de șabloane, astfel încât dacă lucrați cu un fișier care se potrivește în cadrul ierarhiei menționate, va fi în mod automat folosită o interogare legată de tipul de șablon.

Dar scrierea de aplicații sau chiar a unor teme WordPress avansate vă va crea șabloane care nu se încadrează în ierarhie și necesită așadar un set propriu de interogări.

Aceasta este o modalitate în care va trebui să o utilizați WP_Query.

În al doilea rând, dacă doriți să retrageți un set personalizat de informații, fie că este vorba despre o singură bucată sau mai multe piese, pentru o anumită postare, pagină, tipul postului personalizat, categoria, taxonomia etc. WP_Query este, fără îndoială, cea mai bună opțiune.

Un cuvânt despre resetarea interogării

Există unul mare Trebuie să folosesc WP_Query aceasta este cheia pentru a vă înlătura înțelegerea API și că este wp_reset_postdata ().

Așa cum Codex-ul descrie:

Utilizați această funcție pentru a restabili variabila globală $ post a ciclului principal de interogare după o buclă de interogare secundară folosind noul WP_Query. Se restabilește variabila $ post la postul curent din interogarea principală.

Din cauza modului în care WordPress menține informațiile utilizând global variabile, este crucial ca odată ce ați artizat, executat și procesat propriile dvs. WP_Query, atunci trebuie să apelați această funcție specială pentru a restabili informațiile către statul în care se afla înainte de când ați executat propriile interogări.

Acest lucru este astfel incat WordPress sa continue prin looping prin informatii, dupa cum este necesar, in ierarhia template-ului, astfel incat datele sa nu fie mangulate sau pierdute cand redarea continutului ulterior intr-o pagina sau pe o alta pagina.


Următorul Up, WP_User_Query

Dacă WP_Query este atât de important pentru realizarea unor interogări eficiente și sigure pentru tipurile post și atributele acestora, cum putem face același lucru și pentru utilizatori?

La urma urmei, am stabilit deja că, din cutie, WordPress oferă facilități fantastice pentru gestionarea contului, însă nu am discutat despre modalitățile prin care putem gestiona utilizatorii prin interogarea bazei de date.

În următorul articol, vom examina exact acest lucru. Și dacă ești familiarizat cu asta WP_Query - care ar trebui să fie după ce ați citit acest articol - atunci veți găsi următorul articol foarte ușor de urmat.

Cod