WordPress'te Özel Veritabanı Tabloları: Birinci Bölüm
Yayınlanan: 2022-06-27Bu makale dizisinde, WordPress'te eklentili veya eklentisiz nasıl özel veritabanı tabloları oluşturabileceğimize bakacağız.
Özel Veritabanı Tablolarını Ne Zaman ve Neden Kullanmalıyım?
Çoğu durumda, WordPress'i kurduğunuzda oluşturulan varsayılan WordPress veritabanı tabloları tek ihtiyacınız olan şeydir. Bu tablolar, gönderi türleri ve bunlarla ilişkili meta veriler gibi her türlü bilgiyi içerir. Öyleyse neden özel bir veritabanı tablosuna ihtiyacınız var?
WordPress'te kullanılan normal bilgilerin dışında kalan verilerle çalışırken bunlar kendiliğinden ortaya çıkar. Bu nedenle, bilgileri bir veritabanında depolaması gereken bir eklenti oluştururken verileri özel bir tabloya yerleştirmek isteyebilirsiniz. Bu nedenle WooCommerce gibi eklentilerin kendi özel tabloları olduğunu göreceksiniz.
Bilgi depolamak için daha düzenli bir yol olmanın yanı sıra, ayrı tablolar kullanmak performansı artırmaya yardımcı olabilir, çünkü kullanılan sorguların satırlar ve gereksiz veriler arasında arama yapması gerekmez. Bunun yerine, gerekli bilgileri daha hızlı ve verimli bir şekilde bulabilecekleri 'doğru' tabloya yönlendirilebilirler. Veritabanı tabloları büyümeye başladığında bu çok önemli hale gelir.
WordPress Özel Veritabanı Tablosu Oluşturma
Diyelim ki bir öğrenci listesi düzenlememize yardımcı olacak basit bir eklenti oluşturmak istiyoruz. Gerçekte, bunun gibi basit bir görev, özel tabloları hiç kullanmamıza gerek olmadığı anlamına gelir. Özel bir gönderi türü işi mükemmel bir şekilde yapar.
Bununla birlikte, bu örnek uğruna, bu tür veriler özel tabloların arkasındaki teoriyi göstermek için mükemmeldir, bu yüzden onunla çalışacağız. Not: Bazı temel PHP ve mySQL bilgisine sahip olduğunuzu varsayacağız.
Başlarken
Başlamak için ad, yaş, e-posta ve benzersiz bir kimlik için sütunlar içeren bir 'öğrenci' veritabanı tablosu oluşturacağız. Bunu, işi halletmek için özel bir eklenti oluşturarak yapacağız.
NOT: Özel bir eklentiyi nasıl oluşturabileceğinizi bilmiyorsanız, bu eğitime devam etmeden önce kendi özel WordPress eklentinizi oluşturma kılavuzumuza göz atın!
Eklenti Dosyalarını Oluşturun
Eklentiler klasöründe “my-custom-db-tables” adında bir klasör oluşturacağız ve bunun içinde bu kod parçasını içeren “my-custom-db-tables.php” adında bir dosya oluşturacağız:
<?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');
Yaptığımız şey, WordPress'in eklentiyi tanıması için eklenti bilgilerini tanıtmaktı. Açıkçası, create_the_custom_table()
işlevi olacak veritabanına tablo şemasını ekleyen bir işleve de ihtiyacınız olacak.
Çoğu durumda, ideal olarak eklenti etkinleştirildiğinde, bu işlevi yalnızca bir kez çalıştırmanız gerekir. Bu nedenle, eklentinin etkinleştirilmesi üzerine işlevin çalıştığından emin olmak için WordPress'in sağladığı register_activation_hook() işlevini kullandık.
Tablonun Yapısını Tanımlayın
Tabii ki, işlev hala boş olduğu için eklentiyi etkinleştirirsek henüz hiçbir şey olmayacak. Öyleyse, tabloyu gerçekten oluşturmak için gidip bu kodla dolduralım:
<?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');
Şimdi bu kod parçasıyla ne yaptığımızı incelemek için bir an duralım.
Her şeyden önce, veritabanı ile iletişim kuran global $wpdb
WordPress sınıfını kullanarak tablo önekini alıyoruz. wp-config.php
dosyasında tanımlananla aynı önektir ve bunu özel tablonuzda da kullanmak iyi bir uygulamadır. Ayrıca, sorguda daha sonra ayarlamak için geçerli harmanlamayı $charset_collate
değişkenine kaydederek devralacağız.
Bir sonraki adımımız, istenen şemayı doğru elde etmek için sql sorgusunda tablonun yapısını tanımlamaktır. Dediğimiz gibi, her biri için doğru veri türünü içeren bir kimlik, e-posta, ad ve yaş sütunu.
$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;";
Ardından, upgrade.php
dosyasını require_once
olarak alıyoruz. Hemen ardından gelen dbDelta
işlevini kullanmak için bu zorunludur. WordPress'teyken, bir veritabanı tablosu oluşturmak (veya mevcut tabloları yeni bir yapıya güncellemek) için dbDelta işlevini kullanmamız gerekir.
NOT: Doğrudan bir SQL sorgusu yürütmek yerine, bu işlev, belirtilen SQL ifadelerine dayalı olarak bir tablo oluşturarak veya güncelleyerek veritabanını değiştirmek için kullanılır. $queries
parametresini kullanarak özel tablomuzun şemasını geçebiliriz.
Şimdi eklentiyi etkinleştirir ve veritabanınızı kontrol ederseniz, tablonun oluşturulduğunu görmelisiniz.
Şimdi, wp-admin/includes/upgrade.php
dosyasının içini okursanız, dbDelta()
'nın SQL deyiminden bilgi almak için preg_match()
işlevini kullandığını fark edeceksiniz. Bu nedenle, düzenlerken dikkatli olmanız gerekir. Resmi belgeler bu konuda daha fazla bilgi sağlar, ancak aşağıda önemli noktaları vurguladık:
- SQL ifadenizde her alanı kendi satırına koymalısınız.
- PRIMARY KEY sözcükleri ile birincil anahtarınızın tanımı arasında iki boşluk olmalıdır.
- Eşanlamlısı INDEX yerine KEY anahtar sözcüğünü kullanmalısınız ve en az bir ANAHTAR eklemelisiniz.
- KEY'den sonra tek bir boşluk , ardından anahtar adı, ardından bir boşluk, ardından alan adıyla açık parantez, ardından kapalı bir parantez gelmelidir.
- Birincil dışındaki diğer KEY'lere bir ad verilmelidir. Örneğin:
... PRIMARY KEY (id), KEY age (age) ...
- Alan adlarının etrafında herhangi bir kesme işareti veya ters işaret kullanmamalısınız .
- Alan türlerinin tamamı küçük harf olmalıdır.
- CREATE TABLE ve UPDATE gibi SQL anahtar sözcükleri büyük harf olmalıdır.
- Örneğin id sütununun int(11) gibi bir uzunluk parametresini kabul eden tüm alanların uzunluğunu belirtmelisiniz .
Tablonun veritabanında zaten var olup olmadığını kontrol etmediğimizi de fark etmiş olabilirsiniz. Bunun nedeni, dbDelta
bunu bizim için yapmasıdır. Güncelleme sorguları için endişelenmenize gerek yok. Yalnızca tabloyu oluşturmakla kalmaz, aynı ada sahip bir tablonun zaten var olup olmadığını kontrol eder ve varsa tabloyu oluşturmaz. Yalnızca gerekirse mevcut tablo yapısını güncelleyecektir.
Bunu serinin ilerideki yazılarında daha fazla ele alacağız.
İşlevsellik ve Ölçeklenebilirlik
Peki, eklenti devre dışı bırakıldığında veya kaldırıldığında ne olmalı? İdeal olarak, eklenti devre dışı bırakıldığında veya silindiğinde bu tablonun veritabanından silinip silinmeyeceğini seçmek için bir yönetici seçeneği olmalıdır.
Ayrıca, er ya da geç eklentinizi değiştirmeniz gerektiğini (geliştirmek veya bir hatayı gidermek için) neredeyse kesinlikle bulacaksınız. Belki de verileri saklama şeklini değiştirmek, tabloya sütunlar eklemek veya tasarımını değiştirmek isteyebilirsiniz. Bu, eklentiyi mümkün olduğu kadar ölçeklenebilir ve yapılan değişikliklere uyum sağlayabilecek şekilde oluşturmanız gerektiği anlamına gelir.
Bu serinin sonraki makalelerinde bu konuları inceleyeceğiz ve size bunu nasıl başarabileceğinizi göstereceğiz. Daha sonra tekrar kontrol et!