Cara yang benar untuk melakukan ini hari ini adalah dengan memasukkan skema Anda sebagai file dalam sumber plugin dan menggunakan fungsi WordPress inbuilt dbDelta () untuk memperbarui database yang diperlukan menggunakan skema itu. Kode aktual yang diperlukan sangat sederhana:
$sql = file_get_contents( plugin_dir_path(__FILE__) . "/schema.sql" );
dbDelta( $sql );
Ini akan membuat dan memperbarui database untuk Anda sesuai kebutuhan. Ketika saya terakhir memeriksa itu tidak menghapus kolom lama yang tidak terpakai, jadi Anda perlu kode untuk itu melalui pemeriksaan versi. Ini adalah fitur WordPress yang indah dan penghemat waktu yang sangat besar. Hati-hati saat membuat file schema.sql yang Anda salin spasi di ekspor skema mysql persis seperti kode dbDelta () yang terkenal sangat cerewet tentang spasi. Anda juga harus menguji versi database, dan jika itu bukan yang terbaru, panggil yang di atas untuk memperbarui database. Anda juga mungkin perlu melakukan pembaruan spesifik untuk menutupi perubahan yang dbDelta () tidak beres (mis. Menghapus kolom). Sangat mudah untuk menulis logis jika tes sederhana untuk melihat apakah versi telah diperbarui dan melakukan pembaruan manual ini melalui $ wpdb. Misalnya, Anda mungkin menjatuhkan kolom yang sekarang tidak digunakan.
$installed_ver = get_option(MY_DB_VERSION);
$wpp = $wpdb->prefix . "mypluginname";
if ($installed_ver < 102)
$wpdb->query("ALTER TABLE ${wpp}_movies DROP nft_date");
if ($installed_ver < 107)
$wpdb->query("ALTER TABLE ${wpp}_movies CHANGE lastupdated "
. "lastupdated TIMESTAMP on update CURRENT_TIMESTAMP "
. "NOT NULL DEFAULT CURRENT_TIMESTAMP");
update_option(MY_DB_VERSION, $db_version);
Ini disederhanakan dari menjalankan kode, permintaan maaf jika saya telah merusaknya dalam proses menyederhanakannya untuk publikasi.
Juga ingat bahwa pada WordPress 3.9.2, WordPress tidak selalu menjalankan kait aktivasi saat memperbarui plugin (khususnya, jika pembaruan massal dilakukan dari halaman Pembaruan Dashboard).
Singkatnya, ya -
$wpdb
kelas. Lihat Codex untuk informasi lebih lanjut.Setiap kali Anda berinteraksi dengan tabel khusus (atau tabel apa saja, sebenarnya) Anda harus melaluinya
$wpdb
- khususnya pastikan Anda terbiasa denganprepare
metode yang dapat membantu lolos dari kueri dan mencegah injeksi.Anda harus sudah terbiasa, karena Anda harus menggunakannya untuk membuat tabel. Pada kait instal Anda, Anda harus memiliki sesuatu seperti:
Kode ini sebenarnya dijalankan setiap kali plug-in diaktifkan (tidak hanya diinstal). Jadi itu akan berjalan ketika seseorang memperbarui plug-in secara otomatis . Catatan: Jika mereka meningkatkan dengan mengganti plug-in secara manual - maka itu tidak akan - jadi Anda harus memicu kode di atas
admin_init
ketika plug-in Anda ditingkatkan (nomor versi toko dalam tabel opsi, periksa versi saat ini) .Sekarang Anda biasanya tidak ingin
CREATE TABLE
perintah SQL dijalankan setiap kali Anda memperbarui plug-in - ini adalah tempatnyadBDelta()
.Sebelum menjalankan perintah di atas - memeriksa apakah tabel ada. Terlebih lagi, ini memeriksa jenis kolom. Jadi jika tabel tidak ada, itu akan membuatnya, jika itu ada, tetapi beberapa jenis kolom telah mengubahnya memperbaruinya, dan jika sebuah kolom tidak ada - ia menambahkannya.
Sayangnya - jika Anda menghapus kolom dari yang di atas, itu tidak secara otomatis menghapus kolom. Untuk menghapus kolom / tabel Anda perlu secara khusus
DROP
(memeriksa mereka ada sebelum Anda melakukannya).sumber