Saya sedang membuat plugin wordpress. Apa sajakah hal khas yang harus saya sertakan dalam fitur uninstall?
Misalnya, haruskah saya menghapus tabel yang saya buat di fungsi instal?
Apakah saya membersihkan entri opsi saya?
Ada yang lain?
plugins
activation
uninstallation
deactivation
redconservatory
sumber
sumber
Jawaban:
Ada tiga kait berbeda . Mereka memicu dalam kasus berikut:
Cara memicu fungsi dengan aman selama skenario
Berikut ini menunjukkan cara yang tepat untuk mengaitkan fungsi panggilan balik dengan aman yang dipicu selama tindakan yang disebutkan.
Anda bisa menggunakan kode ini di plugin yang menggunakan
Saya akan menunjukkan tiga plugin demo berbeda yang dapat Anda periksa dan kemudian mengimplementasikan kode di plugin Anda sendiri.
Catatan penting di muka!
Karena topik ini sangat sulit dan sangat terperinci dan memiliki selusin kasus + tepi, jawaban ini tidak akan pernah sempurna. Saya akan terus meningkatkannya dari waktu ke waktu, jadi periksa kembali secara teratur.
(1) Aktifkan / Nonaktifkan / Hapus plugin.
Callback pengaturan plugin dipicu oleh core dan Anda tidak memiliki pengaruh pada bagaimana core melakukan ini. Ada beberapa hal yang perlu diingat:
echo/print
apa pun (!) Selama callback pengaturan. Ini akan mengarah keheaders already sent
pesan dan inti akan merekomendasikan untuk menonaktifkan dan menghapus plugin Anda ... jangan tanya: Saya tahu ...exit()
pernyataan ke semua callback yang berbeda sehingga Anda bisa mendapatkan wawasan tentang apa yang sebenarnya terjadi. Batalkan komentar mereka untuk melihat hal-hal berfungsi.__FILE__ != WP_PLUGIN_INSTALL
dan (jika tidak: batalkan!) Untuk melihat apakah ada yang benar-benar menghapus plugin. Saya akan merekomendasikan untuk hanya memicuon_deactivation()
callback selama pengembangan, sehingga Anda menghemat waktu yang Anda butuhkan untuk mendapatkan semuanya kembali. Setidaknya ini yang saya lakukan.defined( 'ABSPATH' ) OR exit;
wp_die()
layar meminta izin yang tepat (dan jika Anda ingin mencoba lagi ... ya, tentu ), ketika Anda mendapat kesalahan. Hal ini terjadi sebagai inti pengalihan Anda, set saat ini$GLOBALS['wp_list_table']->current_action();
untukerror_scrape
dan kemudian memeriksa pengarah untukcheck_admin_referer('plugin-activation-error_' . $plugin);
, di mana$plugin
adalah$_REQUEST['plugin']
. Jadi pengalihan terjadi pada setengah halaman memuat dan Anda mendapatkan bilah gulir kabel ini dan layar mati wawasan admin kuning / kotak pesan. Jika ini terjadi: Tetap tenang dan cari kesalahan dengan beberapaexit()
dan langkah-demi-langkah debugging.(A) Plugin fungsi polos
Ingat bahwa ini mungkin tidak berfungsi jika Anda menghubungkan callback sebelum definisi fungsi.
(B) Arsitektur berbasis kelas / OOP
Ini adalah contoh paling umum dalam plugin saat ini.
(C) Arsitektur berbasis kelas / OOP dengan objek pengaturan eksternal
Skenario ini mengasumsikan bahwa Anda punya file plugin yang utama dan file kedua bernama
setup.php
dalam subdirektori plugin bernamainc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Ini akan berfungsi juga ketika folder plugin berada di luar struktur folder WP default, juga ketika direktori konten diganti namanya atau dalam kasus di mana file setup Anda dinamai berbeda. Hanyainc
folder yang harus memiliki nama & lokasi yang relatif sama dari direktori root plugins.Catatan: Anda cukup mengambil tiga
register_*_hook()*
fungsi dan kelas dan memasukkannya ke dalam plugin Anda.File plugin utama:
File pengaturan:
(2) Pembaruan plugin
Jika Anda menulis plugin yang memiliki tabel atau opsi DB sendiri, mungkin ada skenario di mana Anda perlu mengubah atau meningkatkan hal-hal.
Sayangnya sejauh ini tidak ada kemungkinan untuk menjalankan sesuatu pada plugin / theme install atau perbarui / upgrade. Dengan senang hati ada penyelesaian: Kaitkan fungsi kustom ke opsi kustom (ya, itu lumpuh - tetapi berfungsi).
Sumber
Fungsi pembaruan ini adalah contoh yang tidak terlalu bagus / ditulis dengan baik, tetapi seperti yang dikatakan: Ini adalah contoh dan tekniknya bekerja dengan baik. Akan memperbaikinya dengan pembaruan nanti.
sumber
check_admin_referer()
. Mereka tidak perlu disanitasi karena core tidak melakukannya sendiri dan akan membandingkannya dengan$_REQUEST
nilai-nilai yang tidak disanitasi . Tetapi jika mereka mulai menangis seperti gadis kecil karena itu, gunakan sajafilter_var()
atauesc_attr()
di atasnya.Untuk menguji sistem saat ini untuk fitur-fitur yang diperlukan seperti versi PHP atau ekstensi yang diinstal, Anda dapat menggunakan sesuatu seperti itu:
Tes dengan cek untuk PHP 5.5:
sumber
register_activation_hook
sini - mengapa tidak menggunakannya? Akankah ini dinyalakan sebelum atau sesudahnyaregister_activation_hook
dan akanregister_activation_hook
memecat sekalipun hal di atas tidak berlalu?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
ke kait aktivasi dan plugin aktif tanpa melakukan pemeriksaan. . .admin_notices
.