Creați-vă propriile tabele în WordPress bază de date - revista wp

Acasă → Diverse → Creați propriile tabele în baza de date WordPress

Dar, în practică, nu este întotdeauna optimă, și, uneori, există o nevoie de a crea propria lor masă în baza de date WordPress. Cu această abordare, există dezavantaje evidente:

  • WP_Query nu se poate utiliza pentru a accesa datele
  • Datele din tabel nu utilizează nici un obiect cache
  • Interfața utilizator pentru lucrul cu datele necesare pentru a construi propria lor
  • Roluri, formate privilegii și șabloane de ieșire permalink trebuie, de asemenea, să ia
  • Nu puteți utiliza WordPress taxonomie pentru gruparea datelor

Există cu siguranță un plus, ceea ce justifică adesea utilizarea propriilor tabele în WordPress: avem de a determina structura, tipurile de date și indexurile. Iar atunci când se lucrează cu cantități mari de date, aceasta poate afecta foarte mult viteza site-ului.

Funcția dbDelta ()

încorporată funcția dbDelta () vă permite să creați un tabel în baza de date WordPress, și de a face modificări în structura lor. Dar, înainte de a crea un tabel nou, trebuie să decidă cu privire la numele și codificarea acesteia.

Numele noului tabel ar trebui să aibă același prefix, care este utilizat de către nucleul WordPress (implicit wp_) și un prefix opțional pentru pluginul sau proiectul nostru, de exemplu: wp_my_table_name. Wp_ prefix poate fi obținut prin get_blog_prefix () metoda a obiectului global $ wpdb. și folosind proprietăți charset coroborarea și pot fi utilizate pentru a determina codificarea:

utilizând funcția Apoi, dbDelta () putem crea un tabel nou:

Funcția dbDelta () este diferit de o interogare MySQL simplu în baza de date WordPress. Acesta împarte structura de masă în părți, și o compară cu tabelul care există deja. Acest lucru permite dbDelta () pentru a face modificări în structura tabelului, fără a fi nevoie de a șterge și de a crea din nou tabel.

De exemplu, pentru a adăuga o nouă coloană la masa noastră, ne putem schimba interogarea noastră de bază CREATE TABLE urmează:

În acest caz, rupe interogarea în bucăți, funcția dbDelta () va recunoaște că a adăugat o nouă culoare coloană. și executa interogarea corespunzătoare ALTER TABLE pe un tabel existent în baza de date WordPress. Pentru a verifica dacă a făcut-o funcție putem obține rezultatul dbDelta, de exemplu, folosind var_dump ().

dbDelta Funcția Un astfel de comportament () îi permite să fie refolosite pe aceeași masă, dar rețineți că de fiecare dată când suni dbDelta () va interoga baza de date pentru a obține structura dorită a tabelului, astfel încât pentru a efectua dbDelta () pe fiecare încărcare a paginii - nu este optim.

tabele și versiunea dbDelta ()

În acest plugin putem specifica versiunea curentă a schemei bazei de date și o actualizează numai atunci când într-adevăr schimba schema de propria lor masă. Iar atunci când actualizați schema folosind dbDelta (), putem înregistra versiunea de opțiuni WordPress actualizare similară nu mai mult de o dată.

Astfel, în timpul evenimentului de inițializare, controalele noastre plug-in versiune a schemei bazei de date instalate în opțiunile de WordPress.

Dacă versiunea instalată nu este disponibilă sau este mai mică decât versiunea curentă, noi numim actualizare () metoda de plugin-ul nostru, care poate fi utilizată funcția dbDelta () pentru a actualiza schema bazei de date, și în cele din urmă de upgrade opțiuni în WordPress.

În această abordare, după schimbarea structurii de date în cererea de dbDelta (), avem nevoie doar pentru a crește clasa variabila $ db_version.

Modul multilocație, codul de mai sus va lucra pentru fiecare site în rețea separat, și anume Fiecare site va avea propriul wp tabel _ * _ my_products. În cele mai multe cazuri, acest lucru este exact ceea ce dezvoltatorul planificat.

Cu toate acestea, uneori avem nevoie pentru a crea o așa-numită de masă „la nivel mondial“, care va fi singura din întreaga rețea. În acest caz, cele două mici schimbări trebuie să se facă:

  1. Specificați 0 în get_blog_prefix de apel (). de a utiliza o bază de date la nivel mondial prefix WordPress.
  2. Utilizați get_site_option () și update_site_option () pentru a stoca versiunea schema de date numai la site-ul principal în rețea.

Așa cum am menționat mai devreme în acest articol, pentru a prelua datele de la noul nostru tabel, nu putem folosi clasa WP_Query sau orice alte funcții de sprijin pentru WordPress. Anchetele ar trebui să fie construite și executați manual folosind $ wpdb obiect:

Această funcție va returna produsul cu un anumit identificator în baza de date. Rețineți că, atunci când re-apela aceleași funcții cu același identificator, se re-executa interogarea bazei de date baza de date MySQL. Pentru a evita acest lucru, puteți utiliza obiectele stocate în memoria cache în WordPress.

Noi ar trebui să acorde o atenție, de asemenea, la metoda de a pregăti () obiect $ wpdb. Acesta vă permite să specificați formatul variabilelor de comunicare în baza de date WordPress și, în cele mai multe cazuri, protejează împotriva SQL-injectare.

Asta e tot bine, dar este posibil să se facă într-un fel o legătură cu mesele lor WP_Query, sau există o clasă abstractă, care poate face un înveliș pe WP_Query asemănare cu propriile lor tabele?

Din păcate, WP_Query care nu sunt proiectate pentru a lucra cu mese în aer liber, așa că pur și simplu nu se dovedesc a conecta la tabele, mai ales că tabelele arbitrare sunt adesea create cu o structură diferită.

Opțiunea cea mai de încredere ar fi pentru a crea propria clasă folosind ca WP_Query bază. Un exemplu este în WordPress de bază (WP_Comment_Query, WP_User_Query) și produse terțe, cum ar fi în SP_Query SupportPress.

În cazul în care masa ta are o meta-date cu aceeași structură ca și postmeta, usermeta și commentmeta, puteți utiliza funcțiile standard de acces la get_metadata meta-date (), etc. și WP_Meta_Query de clasă. Pentru a face acest lucru, tabelul cu meta-date trebuie să fie declarate în obiectul $ wpdb și funcția disponibile _get_meta_table (). Mai multe în wp-includes / meta.php.

Totuși, este posibil să se constate o caracteristică interesantă, care este ușor de dor în manual, acesta poate fi în valoare de câteva ore de eroare la căutarea:
Trebuie să aveți două spații între cuvinte-cheie primară și definirea cheii primare.