Bu seferki dersimiz de metaların bir tık sonrası olan ve mecbur kaldığımızda mutlaka başvuracağımız veritabanı çağrıları. WordPress ilk bakışta karmaşık, fakat kendi fonksiyonlarıyla son derece mantıklı ve güvenli bir veritabanı yapısına sahip. Bakalım bir geliştirici olduğumuzda bunu nasıl avantaja çevirebiliriz.
Eklentinizi kurala uygun yapıyorsanız aslında her daim wordpress veritabanına bağlısınız demektir. Basit bir değişken çağrısıyla bağlantının bir kopyasını elde edip istediğimiz çağrıları yapabiliriz.
global $wpdb; $results = $wpdb->get_results( 'SELECT * FROM wp_options WHERE option_id = 1', OBJECT );
Bu örnekte ne çağrısı yaptığımız çok önemli değil, amaç bağlantıyı kurmak için kullandığımız global $wpdb;
çağrısı.
Veritabanı çağrısı bize çok satırlı sonuç döndürecekse 4 değişik biçimden birisini seçerek sonucu işleyebiliriz.
Tür | Açıklama |
OBJECT | Sayısal indeksli satır objeleri |
OBJECT_K | İlk sütünün ismiyle indekslenen satır objeleri |
ARRAY_A | Sayısal indekslenmiş dizilimler. Her biri kendi içinde çağırışımsal indeksli dizilimlerden oluşur. |
ARRAY_N | Sayısal indekslenmiş sayısal indeksli dizilimler. |
Bir kaç değişik sorgu fonksiyonu barındıran wordpress, kullanımları konusunda dikkatli olmamızı bekliyor. Özellikle içeriklerin düzgün şekilde escape edilmeleri bu konuda çok önemli.
İlk örneğimizdeki sorgu bir önceki yazımda da anlattığım delete_post_meta() fonksiyonun içeriği:
//Bu sorgu yöntemi genel sorgular için. //Sonuç olarak etkilenen satır sayısını döndürüyor //Hata durumunda FALSE döndürüyor, //0'dan ayırmak için == operatörünü kullanmak lazım //CREATE, ALTER, DROP ve TRUNCATE esas kullanım yeri $result = $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s ", 13, 'gargle' ) );
Şimdi diğer fonksiyonlar daha kolay anlaşılır olacak:
//Tek bir değişken değerini almak için kullanılır $wpdb->get_var( 'query', column_offset=0, row_offset=0 ); //Tek bir satırı almak için kullanılır //Birden fazla sonuç varsa offset değerine göre bir tanesi döner //Fakat diğer sonuçlar kullanım için cache'te bekler $wpdb->get_row('query', output_type, row_offset=0); //Tek bir sütün değeri için $wpdb->get_col( 'query', column_offset ); //Tüm diğer genel ve çoklu sonuçlar için $wpdb->get_results( 'query', output_type ); //Ekleme $wpdb->insert( $table, $data, $format ); //Değiştirme, yoksa ekleme $wpdb->replace( $table, $data, $format ); //Güncelleme $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); //Silme $wpdb->delete( $table, $where, $where_format = null ); //Önbellek temizliği $wpdb->flush();
Elbette buradaki en hassas konu wordpress’in kendi oluşturduğu bir bilgiye erişmek. Genelde bu verilere fonksiyon kullanarak da ulaşmak mümkün, fakat bazı durumlarda daha optimize ve hızlı veritabanı çağrıları yaparak eklentimizin hızını artırmamız mümkün. Fakat bu yazımız fazla uzadı ve detaylandırmadan önce yazdıklarımı sindirmeniz daha iyi olacaktır. Bir sonraki yazımda wordpress bilgilerini nasıl veritabanı sorgusuyla alacağımızdan bahsedeceğim.