ayıklama "register_activation_hook"

2 Cevap php

Başlangıçta WordPress forumlarında yayınlanan ama kimse cevap ... Bu yüzden burada şansımı deneyeceğim ...

Hi all,

Kendimi ben (de ben de sadece daha yararlıdır olmak benim öğrenme deneyimi kullanabilirsiniz yararlı olacağını Twitter'da insanlar sordu sonra bir kullanıcı tarafından oluşturulan sözlük eklentisi witting bir hedef belirleme tarafından bir WordPress eklentisi yazma öğrenmek için çalışıyorum me).

Neyse, yükleme eklentisi bir veritabanı tablosunu kurar ve ona bazı test verileri ekler. Içerik görüntülenir Sonra bir foreach döngüsü her ifade değiştirir ve DHTML floaty kutusu ile değiştirir.

Sorun ancak, ben register_activation_hook ile oluyor ne işe edemez ise; çağrılan olabilir ve SQL başarısız olduğu veya (ben eklenti etkinleştirmek sonra veritabanında fazladan bir tablo yok ya yol) çağrıldığını olmayabilir.

Kanca bu gibi görünüyor:

register_activation_hook(__FILE__, "bot_install");

Ve bu gibi bot_install kodu

function bot_install()
{
    global $wpdb;
    $table = $wpdb->prefix."sh_gloss";

    $structure = "CREATE TABLE $table (
        id INT(9) NOT NULL AUTO_INCREMENT,
        phrase VARCHAR(80) NOT NULL,
        desc VARCHAR(255) NOT NULL,
    UNIQUE KEY id (id)
    );";
    $wpdb->query($structure);

    // Populate table
    $wpdb->query("INSERT INTO $table(phrase, desc)
        VALUES('Scott Herbert', 'Rockstar Programmer')");

}

Tamam bu yüzden öncelikle ego veritabanı girişi affet lütfen, sadece test içindir ...

Secondly is there something I should have seen that I've missed? And thirdly (and most importantly) how can I debug "bot_install"? Can I just add statements like:

echo "in xxxx";

ya bu pisliği başlıkları olacak (Ben tüm bu kod ana çıkış öncesi koştu sanırım beri).

Thanks in advance Scott

2 Cevap

Ben kodu işleme hiçbir hata olmadığından, bir şey çalışmadığını nasıl $wpdb geçerli bir veritabanı bağlantı kolu olduğunu biliyor musunuz ve nasıl kod tespit olabilir WordPress hakkında hiçbir şey bilmiyorum, ama ... - Örneğin, başarısız CREATE TABLE deyimi? Kod görünüşte körü körüne (kaygısız) can şey varsayar ya da yanlış gidecek, ama benim deneyim şeyler yanlış gidiyor olabilir.


Hala uzman değilim, ama URL başvurulan diyor ki:

Run Any Query on the Database

Sorgu işlevi WordPress veritabanı üzerinde herhangi bir SQL sorgusu çalıştırmak için izin verir. Bu SEÇ sorgular için, ancak, daha spesifik bir işlev (aşağıya bakınız) kullanmak en iyisidir.

<?php $wpdb->sorgu('sorgu'); ?>

sorgu

(string) The SQL sorgu you wish to execute.

Fonksiyonu seçildiğinde / etkilenen satır sayısına karşılık gelen bir tamsayı döndürür. MySQL hatası varsa, işlev FALSE döndürecektir. (Not: hem 0 hem de YANLIŞ iade edilebilir beri, emin, doğru karşılaştırma operatörünü kullanmak olun: eşitlik == özdeşik vs ===).

[...]

Örnekler

Mesaj 13 'gargara' meta anahtar ve değerini silin.

   $wpdb->sorgu("
       DELETE FROM $wpdb->postmeta WHERE post_id = '13'
             AND meta_key = 'gargle'");

CREATE TABLE işlem başarısız olursa Yani, muhtemelen, size uygun operatör ile test edebilirsiniz, hangi ondan geri YANLIŞ alacak - Ben hangisi emin değilim.

Daha aşağı, hataların konuda, sayfa diyor ki:

Show and Hide SQL Errors

Sırasıyla, show_errors ve hide_errors ile açık ve kapalı yankılanan hata kapatabilirsiniz.

<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>

You can also print the error (if any) generated by the most recent sorgu with print_error.

<?php $wpdb->print_error(); ?>

Tepki sürece bilgileri görebilirsiniz bozuluyor Son olarak, hata ayıklama için ilk geliştirme aşamasında, çok fazla önemli olmaz ise.

Ben süre önce bu a ile uğraşmak zorunda kaldı. Register_activation_hook ile zor bir şey çalışan sorguları dbDelta işlevini kullanın, benim için işe yaramadı nedense, var.

function bot_install()
{
    global $wpdb;
    $table = $wpdb->prefix."sh_gloss";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

    $structure = "CREATE TABLE $table (
        id INT(9) NOT NULL AUTO_INCREMENT,
        phrase VARCHAR(80) NOT NULL,
        desc VARCHAR(255) NOT NULL,
    	UNIQUE KEY id (id));";

    dbDelta($structure);


    // Populate table
    $wpdb->query("INSERT INTO $table(phrase, desc)
        VALUES('Scott Herbert', 'Rockstar Programmer')");

}

Bu işe yaramazsa bana bildirin.