Eklenti Veritabanı tablosuna Dizin Ekleme


10

Geliştirdiğim bir eklenti için bazı ek tablolar oluşturdum ve bu tablolara dizinler eklemeliyim.

Bunu yapmanın WordPress yolu nedir?

Kullanmak dbDelta()işe yaramıyor gibi görünüyor ve günlüklerde herhangi bir hata görmüyorum.

Yanıtlar:


4

Sen yürütebileceği keyfi ile SQL ifadelerini wpdb :: sorgusu () Veri Tanımlama Bildirimleri, örneğin dahil,

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

Not: Çünkü $wpdb->query()yürütebileceği keyfi SQL kendisine iletmek ifadesi içeriyorsa, HERHANGİ kullanıcı girişi, ardından kullanmak gerektiğini wpdb) (hazırlamak :: SQL Enjeksiyon saldırılarına karşı korumak için.

Ancak bu şu soruyu gündeme getiriyor: eklentiye özgü tablolarınızı nasıl oluşturdunuz? "Manuel olarak" mı yoksa programlı olarak mı? Programlı olarak kullanmadınız $wpdb->query()mı? Eğer bunu "manuel olarak" yaptıysanız, eklenti aktivasyonu üzerine gerçekten tabloları (ve dizinlerini) yaratmalısınız.

Özel tablolar oluşturma gibi şeyleri yapmak için eklenti aktivasyonuna (ve / veya devre dışı bırakma ve kaldırma) nasıl bağlanacağınıza ilişkin bu diğer WPSE sorusuna mükemmel cevaba bakın .


Bu soruyu 5 aylık olmasına rağmen cevapladığınız için teşekkür ederiz. Bunu yaparak sona erdi ama "doğru yol" olup olmadığından emin değildi. Bunu yapmaya çalıştığımda büyük bir yardım olacak.
Süt

@Milk Benim için zevkti. Sorununuzu zaten çözdüğünüzü ya da vazgeçtiğinizi düşündüm :-) Aynı soruna sahip olan ve WPSE'de arama yapan ve sorunuzla karşılaşan diğer kişilere yardımcı olmak için cevapladım (hatta sizden sonra 5mos).
Paul 'Sparrow Hawk' Biron

3

Bir PRIMARY KEY üstünde, dbDelta kullanarak, diğer sütunlar için bir dizin oluşturmak için KEY sözcüğünü ekleyebilirsiniz:

INDEX eş anlamlısı yerine KEY anahtar sözcüğünü kullanmalı ve en az bir KEY eklemelisiniz.

Çekirdekte schema.php örneği:

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

Kaynak: codex - Eklentilerle Tablo Oluşturma

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.