Niestandardowe tabele baz danych w WordPress: część pierwsza

Opublikowany: 2022-06-27

W tej serii artykułów przyjrzymy się, jak możemy tworzyć niestandardowe tabele bazy danych w WordPress z wtyczką lub bez niej.

Kiedy i dlaczego należy używać niestandardowych tabel bazy danych?

W większości przypadków domyślne tabele bazy danych WordPress, które są tworzone podczas instalacji WordPressa, są wszystkim, czego kiedykolwiek będziesz potrzebować. Te tabele zawierają wszelkiego rodzaju informacje, takie jak typy postów i powiązane z nimi metadane. Dlaczego więc potrzebujesz niestandardowej tabeli bazy danych?

Pojawiają się one, gdy pracujesz z danymi, które wykraczają poza normalne informacje używane w WordPress. Dlatego możesz chcieć umieścić dane w niestandardowej tabeli podczas tworzenia wtyczki, która musi przechowywać informacje w bazie danych. To jest powód, dla którego zobaczysz, że wtyczki takie jak WooCommerce mają własne tabele niestandardowe.

Hostuj swoją stronę internetową z Pressidium

60- DNIOWA GWARANCJA ZWROTU PIENIĘDZY

ZOBACZ NASZE PLANY

Oprócz tego, że jest to bardziej przejrzysty sposób przechowywania informacji, używanie oddzielnych tabel może pomóc w zwiększeniu wydajności, ponieważ żadne użyte zapytania nie muszą przeszukiwać wierszy i wierszy niepotrzebnych danych. Zamiast tego mogą zostać przekierowani do „właściwej” tabeli, gdzie mogą szybciej i wydajniej znaleźć potrzebne informacje. Staje się to bardzo ważne, gdy tabele bazy danych zaczynają rosnąć.

Tworzenie niestandardowej tabeli bazy danych WordPress

Powiedzmy, że chcemy zbudować prostą wtyczkę, która pomoże nam uporządkować listę uczniów. W rzeczywistości takie proste zadanie oznacza, że ​​w ogóle nie musimy używać tabel niestandardowych. Niestandardowy typ posta spełniłby zadanie idealnie.

Jednak ze względu na ten przykład ten rodzaj danych jest idealny do zademonstrowania teorii stojącej za tabelami niestandardowymi, więc będziemy z tym korzystać. Uwaga: Zakładamy, że posiadasz podstawową wiedzę na temat PHP i mySQL.

Pierwsze kroki

Na początek utworzymy tabelę „studentów” z kolumnami na imię i nazwisko, wiek, adres e-mail i unikalny identyfikator. Zrobimy to, tworząc niestandardową wtyczkę, aby wykonać zadanie.

UWAGA: Jeśli nie wiesz jeszcze, jak utworzyć niestandardową wtyczkę, zapoznaj się z naszym przewodnikiem na temat tworzenia własnej niestandardowej wtyczki WordPress przed wznowieniem tego samouczka!

Utwórz pliki wtyczek

Utworzymy folder o nazwie „my-custom-db-tables” w folderze wtyczek, a wewnątrz niego plik o nazwie „my-custom-db-tables.php”, który zawiera następujący fragment kodu:

 <?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');

To, co zrobiliśmy, to wprowadzenie informacji o wtyczce, aby WordPress mógł ją rozpoznać. Oczywiście będziesz potrzebować również funkcji, która doda schemat tabeli do bazy danych, którą będzie funkcja create_the_custom_table() .

W większości przypadków wystarczy uruchomić tę funkcję tylko raz, najlepiej, gdy wtyczka jest aktywna. Dlatego użyliśmy register_activation_hook(), który zapewnia WordPress, aby upewnić się, że funkcja działa po aktywacji wtyczki.

Zdefiniuj strukturę tabeli

Oczywiście nic się jeszcze nie stanie, jeśli aktywujemy wtyczkę, ponieważ funkcja jest nadal pusta. Więc chodźmy i wypełnijmy go tym kodem, aby faktycznie stworzyć tabelę:

 <?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');

Teraz zatrzymajmy się na chwilę, aby sprawdzić, co zrobiliśmy z tym fragmentem kodu.

Przede wszystkim pobieramy prefiks tabeli za pomocą globalnej klasy WordPress $wpdb , która komunikuje się z bazą danych. Jest to ten sam prefiks, który jest zdefiniowany w pliku wp-config.php i dobrze jest używać go również w tabeli niestandardowej. Odziedziczymy również bieżące sortowanie, zapisując je w zmiennej $charset_collate , aby ustawić je później w zapytaniu.

Następnym krokiem jest zdefiniowanie struktury tabeli w zapytaniu sql, aby uzyskać odpowiedni schemat. Jak już powiedzieliśmy, kolumna id, e-mail, imię i nazwisko oraz wiek z odpowiednim typem danych dla każdego.

 $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;";

Następnie upgrade.php require_once Jest to obowiązkowe, aby móc korzystać z funkcji dbDelta , która pojawia się zaraz po. W WordPress, aby utworzyć tabelę bazy danych (lub zaktualizować istniejące tabele do nowej struktury), musimy użyć funkcji dbDelta.

UWAGA: Zamiast bezpośredniego wykonywania zapytania SQL, ta funkcja służy do modyfikowania bazy danych poprzez tworzenie lub aktualizowanie tabeli na podstawie określonych instrukcji SQL. Używając jego parametru $queries , możemy przekazać schemat naszej niestandardowej tabeli.

Teraz, jeśli aktywujesz wtyczkę i sprawdzisz swoją bazę danych, powinieneś zobaczyć, że tabela została utworzona.

Teraz, jeśli przeczytasz zawartość pliku wp-admin/includes/upgrade.php , zauważysz, że dbDelta() używa funkcji preg_match() w celu pobrania informacji z instrukcji SQL. Z tego powodu musisz być ostrożny podczas edycji. Oficjalna dokumentacja zawiera więcej informacji na ten temat, ale poniżej podkreśliliśmy kluczowe punkty:

  • Każde pole należy umieścić w osobnym wierszu w instrukcji SQL.
  • Musisz mieć dwie spacje między słowami KLUCZ PODSTAWOWY a definicją klucza podstawowego.
  • Musisz użyć słowa kluczowego KEY zamiast jego synonimu INDEX i musisz podać co najmniej jeden KEY.
  • Po KEY musi następować pojedyncza spacja , potem nazwa klucza, potem spacja, nawiasy otwarte z nazwą pola, nawiasy zamknięte.
  • Inne klucze niż podstawowe, powinny mieć nazwę. Na przykład:
 ... PRIMARY KEY (id), KEY age (age) ...
  • Nie wolno używać żadnych apostrofów ani kresek wokół nazw pól.
  • Wszystkie typy pól muszą być pisane małymi literami .
  • Słowa kluczowe SQL, takie jak CREATE TABLE i UPDATE, muszą być pisane wielkimi literami .
  • Musisz określić długość wszystkich pól, które akceptują parametr długości, np. int(11) kolumny id.

Być może zauważyłeś również, że nie sprawdziliśmy, czy tabela już istnieje w bazie danych. To dlatego, że dbDelta robi to za nas. Nie musisz się martwić o aktualizacje. Nie tylko utworzy tabelę, ale sprawdzi, czy tabela o tej samej nazwie już istnieje, a jeśli tak, nie utworzy tabeli. Zaktualizuje istniejącą strukturę tabeli tylko w razie potrzeby.

Omówimy to więcej w kolejnych artykułach z tej serii.

Funkcjonalność i skalowalność

Co więc powinno się stać, gdy wtyczka zostanie dezaktywowana lub odinstalowana? W idealnym przypadku powinna istnieć opcja administratora, aby wybrać, czy usunąć tę tabelę z bazy danych, czy i kiedy wtyczka zostanie dezaktywowana lub usunięta.

Co więcej, prawie na pewno prędzej czy później okaże się, że trzeba zmienić wtyczkę (aby ją ulepszyć lub naprawić błąd). Być może chcesz zmienić sposób przechowywania danych, dodać kolumny do tabeli lub zmienić jej projekt. Oznacza to, że powinieneś zbudować wtyczkę w taki sposób, aby była jak najbardziej skalowalna i mogła dostosowywać się do wszelkich wprowadzanych zmian.

W kolejnych artykułach z tej serii zagłębimy się w te tematy i pokażemy, jak możesz to osiągnąć. Sprawdź wkrótce!