Tabele de baze de date personalizate în WordPress: Prima parte
Publicat: 2022-06-27În această serie de articole, vom arunca o privire asupra modului în care putem crea tabele de baze de date personalizate în WordPress cu sau fără un plugin.
Când și de ce ar trebui să folosesc tabele de baze de date personalizate?
În cele mai multe cazuri, tabelele implicite ale bazei de date WordPress care sunt create atunci când instalați WordPress sunt tot ce veți avea nevoie vreodată. Aceste tabele conțin tot felul de informații, cum ar fi tipurile de postări și metadatele asociate acestora. Deci, de ce ai avea nevoie de un tabel personalizat de bază de date?
Acestea vin în sine atunci când lucrați cu date care nu se încadrează în informațiile normale utilizate în WordPress. Deci, este posibil să doriți să plasați date într-un tabel personalizat atunci când construiți un plugin care trebuie să stocheze informații într-o bază de date. Acesta este motivul pentru care veți vedea că pluginuri precum WooCommerce au propriile lor tabele personalizate.
Pe lângă faptul că este o modalitate mai ordonată de a stoca informații, utilizarea tabelelor separate poate ajuta la creșterea performanței, deoarece orice interogări utilizate nu trebuie să caute prin rânduri și rânduri de date inutile. În schimb, aceștia pot fi direcționați către tabelul „dreapt” unde pot găsi informațiile necesare mai rapid și mai eficient. Acest lucru devine foarte important atunci când tabelele bazei de date încep să crească.
Crearea unui tabel de bază de date personalizată WordPress
Să presupunem că vrem să construim un plugin simplu care ne va ajuta să organizăm o listă de studenți. În realitate, o sarcină simplă ca aceasta înseamnă că nu trebuie să folosim deloc tabele personalizate. Un tip de post personalizat ar face treaba perfect.
Cu toate acestea, de dragul acestui exemplu, acest tip de date este perfect pentru a demonstra teoria din spatele tabelelor personalizate, așa că vom continua cu ea. Notă: Vom presupune că aveți cunoștințe de bază PHP și mySQL.
Noțiuni de bază
Pentru început, vom crea un tabel de bază de date „student” cu coloane pentru nume, vârstă, e-mail și un ID unic. Vom face acest lucru prin crearea unui plugin personalizat pentru a face treaba.
NOTĂ: Dacă nu sunteți deja familiarizat cu modul în care puteți crea un plugin personalizat, consultați ghidul nostru despre crearea propriului plugin WordPress personalizat înainte de a relua acest tutorial!
Creați fișierele plugin
Vom crea un folder numit „my-custom-db-tables” în folderul pluginuri și în interiorul acestuia, un fișier numit „my-custom-db-tables.php” care conține această bucată de cod:
<?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { // THE CODE } register_activation_hook(__FILE__, 'create_the_custom_table');
Ceea ce am făcut a fost să introducem informațiile despre plugin, astfel încât WordPress să recunoască pluginul. Evident, veți avea nevoie și de o funcție care adaugă schema tabelului la baza de date, care va fi funcția create_the_custom_table()
.
În cele mai multe cazuri, trebuie să rulați această funcție o singură dată, în mod ideal când pluginul este activat. Prin urmare, am folosit register_activation_hook() pe care WordPress îl oferă pentru a ne asigura că funcția rulează la activarea pluginului.
Definiți structura tabelului
Desigur, încă nu se va întâmpla nimic dacă activăm pluginul, deoarece funcția este încă goală. Deci haideți să îl completăm cu acest cod, pentru a crea efectiv tabelul:
<?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'students'; $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'create_the_custom_table');
Acum să facem doar o pauză pentru a examina ce am făcut cu acest fragment de cod.
În primul rând, luăm prefixul tabelului folosind clasa globală WordPress $wpdb
care comunică cu baza de date. Este același prefix care este definit în fișierul wp-config.php
și este o practică bună să îl utilizați și în tabelul personalizat. Vom moșteni, de asemenea, colarea curentă salvându-l în variabila $charset_collate
pentru ao seta mai târziu în interogare.
Următorul nostru pas este să definim structura tabelului în interogarea sql pentru a obține schema dorită corect. După cum am spus, o coloană ID, e-mail, nume și vârstă cu tipul potrivit de date pentru fiecare.
$sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;";
Apoi, avem require_once
fișierul upgrade.php
. Acest lucru este obligatoriu pentru a utiliza funcția dbDelta
care vine imediat după. Când suntem pe WordPress, pentru a crea un tabel de bază de date (sau a actualiza tabelele existente la o nouă structură), trebuie să folosim funcția dbDelta.
NOTĂ: În loc să execute direct o interogare SQL, această funcție este utilizată pentru a modifica baza de date prin crearea sau actualizarea unui tabel, pe baza instrucțiunilor SQL specificate. Folosind parametrul său $queries
, putem trece schema tabelului nostru personalizat.
Acum, dacă activați pluginul și verificați baza de date, ar trebui să vedeți că tabelul a fost creat.
Acum, dacă citiți în fișierul wp-admin/includes/upgrade.php
, veți observa că dbDelta()
folosește funcția preg_match()
pentru a prelua informații din instrucțiunea SQL. Din acest motiv, trebuie să fii atent când îl editați. Documentația oficială oferă mai multe informații despre acest lucru, dar am evidențiat punctele cheie mai jos:
- Trebuie să puneți fiecare câmp pe propria linie în instrucțiunea dvs. SQL.
- Trebuie să aveți două spații între cuvintele PRIMARY KEY și definiția cheii primare.
- Trebuie să utilizați cuvântul cheie CHEIE în loc de sinonimul său INDEX și trebuie să includeți cel puțin o CHEIE.
- KEY trebuie urmată de un singur spațiu , apoi de numele cheii, apoi de un spațiu, apoi de o paranteză deschisă cu numele câmpului, apoi de o paranteză închisă.
- Alte CHEI decât cele primare ar trebui să primească un nume. De exemplu:
... PRIMARY KEY (id), KEY age (age) ...
- Nu trebuie să utilizați nici un fel de apostrof sau backtick în jurul numelor câmpurilor.
- Tipurile de câmpuri trebuie să fie toate cu litere mici .
- Cuvintele cheie SQL, cum ar fi CREATE TABLE și UPDATE, trebuie să fie cu majuscule .
- Trebuie să specificați lungimea tuturor câmpurilor care acceptă un parametru de lungime, cum ar fi int(11) a coloanei id, de exemplu.
Poate ați observat, de asemenea, că nu am verificat dacă tabelul există deja în baza de date. Asta pentru că dbDelta
o face pentru noi. Nu trebuie să vă faceți griji cu privire la interogările de actualizare. Nu numai că va crea tabelul, dar va verifica dacă un tabel cu același nume există deja și, dacă da, nu va crea tabelul. Acesta va actualiza structura tabelului existent doar dacă este necesar.
Vom acoperi acest lucru mai mult în articolele viitoare din serie.
Funcționalitate și scalabilitate
Deci, ce ar trebui să se întâmple când pluginul este dezactivat sau dezinstalat? În mod ideal, ar trebui să existe o opțiune de administrator pentru a alege dacă să ștergeți sau nu acest tabel din baza de date dacă și când pluginul este dezactivat sau șters.
În plus, aproape sigur vei descoperi mai devreme sau mai târziu că trebuie să-ți schimbi pluginul (pentru a-l îmbunătăți sau a remedia o eroare). Poate doriți să modificați modul în care stochează datele, să adăugați coloane la tabel sau să îi schimbați designul. Aceasta înseamnă că ar trebui să construiți pluginul într-un mod care să vă asigure că este cât mai scalabil posibil și se poate adapta la orice modificări care sunt făcute.
În următoarele articole din această serie, vom cerceta aceste subiecte și vă vom arăta cum puteți realiza acest lucru. Verificați din nou în curând!