Membuat table database dengan plugin

Jika kita menulis sebuah plugin untuk WordPress, kita hampir pasti akan menemukan situasi bahwa kita perlu menyimpan beberapa informasi dalam database WordPress. Ada dua jenis informasi yang dapat Anda simpan:

  • Menyiapkan informasi – pilihan pengguna yang dimasukkan saat pengguna pertama kali mengatur plugin Anda, dan cenderung tidak tumbuh lebih dari itu (misalnya, dalam plugin yang terkait tag, pilihan pengguna mengenai format cloud tag di sidebar).
    Informasi pengaturan umumnya akan disimpan menggunakan mekanisme opsi WordPress.
  • Data – informasi yang ditambahkan ketika pengguna terus menggunakan plugin Anda, yang umumnya diperluas informasi yang terkait dengan posting, kategori, unggahan, dan komponen WordPress lainnya (misalnya, dalam plugin yang terkait statistik, berbagai tampilan halaman, pengarah, dan statistik lain yang terkait dengan setiap posting di situs Anda).
    Data dapat disimpan dalam tabel MySQL / MariaDB yang terpisah, yang harus dibuat. Namun, sebelum melompat dengan tabel yang sama sekali baru, pertimbangkan apakah menyimpan data plugin Anda di Post Meta WordPress (a.k.a. Bidang Kustom) akan berfungsi. Post Meta adalah metode yang disukai; gunakan jika memungkinkan / praktis.

Artikel ini menjelaskan cara agar plugin Anda secara otomatis membuat tabel MySQL / MariaDB untuk menyimpan datanya. Perhatikan bahwa sebagai alternatif untuk mengikuti langkah-langkah di sini, Anda bisa meminta pengguna plugin menjalankan skrip instalasi ketika mereka menginstal plugin Anda. Pendekatan lain adalah meminta pengguna mengeksekusi query SQL sendiri, menggunakan sesuatu seperti phpMyAdmin. Tapi tak satu pun dari opsi-opsi itu sangat memuaskan, karena pengguna dapat dengan mudah lupa untuk menjalankan skrip instalasi atau mengacaukan kueri (dan mereka mungkin tidak memiliki phpMyAdmin tersedia).

Jadi, Anda disarankan untuk mengikuti langkah-langkah di bawah ini agar plugin Anda secara otomatis membuat tabel basis datanya:

  1. Tulis fungsi PHP yang membuat tabel.
  2. Pastikan WordPress memanggil fungsi ketika plugin diaktifkan.
  3. Buat fungsi pemutakhiran, jika versi baru plugin Anda perlu memiliki struktur tabel yang berbeda.

Buat Tabel Database

Langkah pertama dalam membuat plugin Anda membuat tabel database secara otomatis adalah membuat fungsi PHP dalam plugin Anda yang menambahkan tabel atau tabel ke database WordPress MySQL / MariaDB. Untuk keperluan artikel ini, kami akan menganggap Anda ingin memanggil fungsi ini jal_install.

Awalan Tabel Database

Dalam file wp-config.php, pemilik situs WordPress dapat menentukan awalan tabel database. Secara default, awalannya adalah “wp_”, tetapi Anda harus memeriksa nilai aktual dan menggunakannya untuk menentukan nama tabel basis data Anda. Nilai ini ditemukan dalam variabel awalan $ wpdb->. (Jika Anda mengembangkan untuk versi WordPress yang lebih tua dari 2.0, Anda harus menggunakan variabel global $ table_prefix, yang tidak digunakan dalam versi 2.1).

Jadi, jika Anda ingin membuat tabel yang disebut (awalan) liveshoutbox, beberapa baris pertama dari fungsi pembuatan-tabel Anda adalah:

function jal_install () {
   global $wpdb;

   $table_name = $wpdb->prefix . "liveshoutbox"; 
}

Membuat atau Memperbarui Tabel

Langkah selanjutnya adalah membuat tabel database. Daripada mengeksekusi query SQL secara langsung, kita akan menggunakan fungsi dbDelta di wp-admin / include / upgrade.php (kita harus memuat file ini, karena tidak dimuat secara default). Fungsi dbDelta memeriksa

struktur tabel saat ini, bandingkan dengan struktur tabel yang diinginkan, dan tambahkan atau ubah tabel seperlunya, sehingga sangat berguna untuk pembaruan (lihat wp-admin / upgrade-schema.php untuk lebih banyak contoh tentang cara menggunakan dbDelta) . Perhatikan bahwa fungsi dbDelta agak pilih-pilih. Contohnya:

Anda harus meletakkan setiap bidang pada barisnya sendiri dalam pernyataan SQL Anda.
Anda harus memiliki dua spasi antara kata-kata KUNCI UTAMA dan definisi kunci utama Anda.
Anda harus menggunakan kata kunci KEY daripada sinonim INDEX dan Anda harus memasukkan setidaknya satu KUNCI.
KUNCI harus diikuti oleh RUANG TUNGGAL kemudian nama kunci lalu spasi kemudian buka tanda kurung dengan nama bidang lalu tanda kurung tertutup.
Anda tidak boleh menggunakan tanda kutip atau tanda kutip belakang di sekitar nama bidang.
Jenis bidang harus semuanya huruf kecil.
Kata kunci SQL, seperti CREATE TABLE dan UPDATE, harus huruf besar.
Anda harus menentukan panjang semua bidang yang menerima parameter panjang. int (11), misalnya.
Dengan peringatan itu, berikut adalah baris berikutnya dalam fungsi kami, yang sebenarnya akan membuat atau memperbarui tabel. Anda harus mengganti struktur tabel Anda sendiri dalam variabel $ sql:

global $wpdb;

$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
  id mediumint(9) NOT NULL AUTO_INCREMENT,
  time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  name tinytext NOT NULL,
  text text NOT NULL,
  url varchar(55) DEFAULT '' NOT NULL,
  PRIMARY KEY  (id)
) $charset_collate;";

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

Catatan: Di atas kita mengatur set karakter default dan collation untuk tabel. Jika kami tidak melakukan ini, beberapa karakter akhirnya dapat dikonversi menjadi hanya? Ketika disimpan di tabel kami. Dalam contoh ini kita menggunakan $ wpdb-> get_charset_collate () untuk mendapatkan set karakter dan kolasi. Fungsi itu diperkenalkan di WordPress 3.5, dan jika Anda perlu mendukung versi sebelum itu, Anda harus membuat sendiri string charset / susun (Anda dapat menyalin sumber fungsi itu).

Menambahkan Data Awal

Akhirnya, Anda mungkin ingin menambahkan beberapa data ke tabel yang baru saja Anda buat. Berikut adalah contoh cara melakukannya:

$welcome_name = 'Mr. WordPress';
$welcome_text = 'Congratulations, you just completed the installation!';

$table_name = $wpdb->prefix . 'liveshoutbox';

$wpdb->insert( 
	$table_name, 
	array( 
		'time' => current_time( 'mysql' ), 
		'name' => $welcome_name, 
		'text' => $welcome_text, 
	) 
);

CATATAN: Untuk selengkapnya tentang menggunakan WPDB, lihat kelas wpdb. Dalam hal ini, kami menggunakan $ wpdb-> insert, sehingga data kami akan secara otomatis lolos. Jika Anda perlu menggunakan metode lain seperti $ wpdb-> sebagai gantinya, itu ide yang baik untuk menjalankan variabel melalui fungsi $ wpdb-> persiapan sebelum meneruskan permintaan ke database untuk mencegah masalah keamanan, meskipun kami mendefinisikan $ welcome_nameand $ welcome_text dalam fungsi ini dan tahu bahwa tidak ada karakter khusus SQL di dalamnya.

Opsi Versi
Ide bagus lainnya adalah menambahkan opsi untuk merekam nomor versi untuk struktur tabel database Anda, sehingga Anda dapat menggunakan informasi itu nanti jika Anda perlu memperbarui tabel:

add_option( "jal_db_version", "1.0" );

Seluruh Fungsi
Fungsi ini selesai. Mari kita lihat semuanya dalam satu kesatuan. Perhatikan bahwa nomor versi sekarang disimpan dalam variabel global.

<?php

global $jal_db_version;
$jal_db_version = '1.0';

function jal_install() {
	global $wpdb;
	global $jal_db_version;

	$table_name = $wpdb-&gt;prefix . 'liveshoutbox';
	
	$charset_collate = $wpdb-&gt;get_charset_collate();

	$sql = "CREATE TABLE $table_name (
		id mediumint(9) NOT NULL AUTO_INCREMENT,
		time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
		name tinytext NOT NULL,
		text text NOT NULL,
		url varchar(55) DEFAULT '' NOT NULL,
		PRIMARY KEY  (id)
	) $charset_collate;";

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

	add_option( 'jal_db_version', $jal_db_version );
}

function jal_install_data() {
	global $wpdb;
	
	$welcome_name = 'Mr. WordPress';
	$welcome_text = 'Congratulations, you just completed the installation!';
	
	$table_name = $wpdb-&gt;prefix . 'liveshoutbox';
	
	$wpdb-&gt;insert( 
		$table_name, 
		array( 
			'time' =&gt; current_time( 'mysql' ), 
			'name' =&gt; $welcome_name, 
			'text' =&gt; $welcome_text, 
		) 
	);
}

Memanggil fungsi
Sekarang kita memiliki fungsi inisialisasi yang ditentukan, kami ingin memastikan bahwa WordPress memanggil fungsi ini ketika plugin

diaktifkan oleh administrator WordPress. Untuk melakukan itu, kita akan menggunakan kait activ_ action. Jika file plugin Anda adalah wp-content / plugins / plugindir / pluginfile.php, Anda akan menambahkan baris berikut ini ke badan utama plugin Anda:

register_activation_hook( __FILE__, 'jal_install' );
register_activation_hook( __FILE__, 'jal_install_data' );

Lihat Function_Reference / register_activation_hook untuk detail lebih lanjut.

Menambahkan Fungsi Peningkatan
Selama masa pakai plugin Anda, Anda mungkin perlu mengubah struktur database plugin dalam versi yang ditingkatkan. Untuk melakukan itu, Anda harus membuat kode pembaruan di dalam plugin Anda yang akan mendeteksi bahwa versi baru telah diinstal, dan memutakhirkan struktur database. Hal termudah untuk dilakukan adalah menambahkan kode ke fungsi jal_install yang baru saja kita buat.

Jadi, mari kita asumsikan bahwa fungsi di atas digunakan untuk membuat basis data versi 1.0 dari plugin Anda, dan Anda sekarang meningkatkan ke versi 1.1 sehingga bidang URL bisa lebih luas (100 karakter daripada 55). Anda perlu menambahkan baris berikut di akhir fungsi jal_install Anda, untuk memeriksa versi dan memutakhirkan jika perlu:

<?php

global $wpdb;
$installed_ver = get_option( "jal_db_version" );

if ( $installed_ver != $jal_db_version ) {

	$table_name = $wpdb-&gt;prefix . 'liveshoutbox';

	$sql = "CREATE TABLE $table_name (
		id mediumint(9) NOT NULL AUTO_INCREMENT,
		time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
		name tinytext NOT NULL,
		text text NOT NULL,
		url varchar(100) DEFAULT '' NOT NULL,
		PRIMARY KEY  (id)
	);";

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

	update_option( "jal_db_version", $jal_db_version );
}

Anda juga harus mengubah variabel $ jal_db_version global di bagian atas file, dan tentu saja Anda ingin mengubah bagian inisialisasi yang dibuat di atas untuk menggunakan struktur tabel baru.

Sejak 3.1 fungsi aktivasi terdaftar dengan register_activation_hook () tidak dipanggil ketika plugin diperbarui. Jadi untuk menjalankan kode di atas setelah plugin ditingkatkan, Anda perlu memeriksa versi db plugin di hook lain, dan memanggil fungsi secara manual jika versi database sudah lama. Seperti ini:

function myplugin_update_db_check() {
    global $jal_db_version;
    if ( get_site_option( 'jal_db_version' ) != $jal_db_version ) {
        jal_install();
    }
}
add_action( 'plugins_loaded', 'myplugin_update_db_check' );

Referensi :

Creating Tables with Plugins

 

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.