Menggunakan Hooks WordPress untuk Membersihkan Kode, Mengaktifkan & Menghapus Instalasi
Diterbitkan: 2015-01-23Penulis plugin mencurahkan begitu banyak waktu dan energi untuk fungsi utama produk mereka, sehingga mereka membiarkan hal-hal yang kurang penting jatuh di pinggir jalan.
Ambil aktivasi dan deaktivasi, misalnya. Sementara kait aktivasi tersebar luas – banyak plugin perlu menambahkan beberapa opsi, menghapus aturan penulisan ulang, mungkin membuat tabel database, atau memeriksa perbedaan versi pada pemasangan – kait penonaktifan dan penghapusan instalasi jauh lebih jarang.
Intinya di sini? Banyak pembuat plugin tidak meluangkan waktu untuk membersihkannya sendiri. Apakah instalasi WordPress benar-benar membutuhkan tabel khusus yang Anda buat setelah menghapus plugin? Mengapa tidak menghapus beberapa opsi yang eksklusif untuk plugin sebelum membuangnya?
Dalam artikel ini, saya akan menunjukkan cara menggunakan kait aktivasi, penonaktifan, dan pencopotan pemasangan untuk menginisialisasi plugin Anda dan membersihkan semuanya dengan lebih mudah setelah pengguna selesai menggunakan produk Anda.
- Kait Aktivasi
- Urutan Instalasi
- Aturan Penulisan Ulang Pembilasan
- Membuat Tabel Database
- Pemeriksaan Ketergantungan
- Kait Penonaktifan
- Kait Penghapusan Instalasi
- Keamanan Tambahan
- Saatnya Membersihkan
Catatan: Jika Anda berencana untuk membaca sekilas artikel ini, saya sangat menyarankan untuk mengintip bagian "Keamanan Tambahan" di bagian akhir, yang melengkapi kode dengan beberapa pemeriksaan keamanan yang berharga. Juga, jika Anda memerlukan bantuan dengan kait plugin WordPress, berikut adalah penyegaran cepat tentang penggunaan kait WordPress dan cara mengaktifkan fungsi di WordPress.
Kait Aktivasi
Meskipun kait aktivasi cukup mudah, menginstalnya adalah kasus khusus, jadi kita harus memperhatikan urutan kejadiannya. Sebelum kita membahas semua ini, berikut adalah contoh sederhana:
Kunci dari semuanya adalah fungsi register_activation_hook()
. Parameter pertama adalah path ke file plugin utama; parameter kedua mendefinisikan fungsi yang akan dijalankan. Secara internal, fungsi register_activation_hook()
adalah pembungkus untuk tindakan “activate_[plugin_name]”, tetapi karena ini sedikit lebih mudah digunakan, tidak biasa melihat pengait di plugin.
Urutan Instalasi
Memahami urutan penginstalan penting karena mencegah penggunaan metode yang mungkin biasa Anda gunakan. register_activation_hook()
dipanggil di antara pengguna yang mengklik tautan aktivasi dan akibatnya melihat pemberitahuan aktivasi. Ini berjalan pada halaman perantara, yang mengarahkan ulang segera sebelum kait apa pun dapat memiliki kesempatan untuk dijalankan.
Mari kita lihat contoh untuk melihat mengapa ini sangat mengecewakan:
Aturan Penulisan Ulang Pembilasan
Sejumlah plugin membuat jenis posting khusus. Menghapus aturan penulisan ulang pada aktivasi untuk memastikan bahwa pengguna tidak mendapatkan kesalahan 404 saat mengunjungi posting dari jenis posting kustom baru adalah langkah yang cerdas.
Kode di bawah ini tampaknya logis tetapi akan gagal.
Tampaknya baik-baik saja. Jenis posting khusus dibuat dan saat aktivasi, kami menghapus aturan penulisan ulang. Masalahnya adalah jenis kiriman khusus belum dibuat saat kami menghapus aturan penulisan ulang.
Berikut adalah tampilan alur prosesnya:
- Pengguna menginstal plugin.
- Pengguna mengklik tautan aktivasi.
- Halaman perantara hanya menjalankan kait aktivasi, tidak ada yang lain. Ini menghapus aturan penulisan ulang.
- Plugin aktif dan kode berjalan seperti biasa. Jenis pos kustom terdaftar.
Solusi yang diposting di Stack Overflow, yang secara resmi didukung oleh WordPress Codex, memecahkan masalah kecil kami. Solusinya melibatkan penambahan opsi untuk menunjukkan bahwa plugin baru saja diinstal.
Jika opsi ini ada, kami melakukan hal-hal aktivasi kami dan kemudian menghapusnya.
Sesuatu seperti ini:
Secara pribadi, saya tidak terlalu menyukai solusi ini. Masalahnya adalah pemeriksaan pada baris delapan berjalan pada setiap pemuatan halaman. Tidak ada yang perlu dikhawatirkan, karena tidak akan membebani server Anda dan tidak akan memperlambat situs web untuk pengguna Anda. Ini adalah pemeriksaan yang sangat cepat dengan dampak yang dapat diabaikan pada kinerja. Namun, 99,9% tidak perlu.
Ada solusi yang lebih baik yang disebutkan dalam Codex dalam dokumentasi untuk fungsi flush_rewrite_rules()
. Dalam solusi ini, kami menggunakan modularitas fungsi kami untuk mendaftarkan jenis pos kustom pada aktivasi secara terpisah:
Alih-alih mengandalkan cek yang perlu dijalankan setiap saat, kami menggunakan fungsi aktivasi untuk mendaftarkan jenis posting kami. Perhatikan bahwa setelah plugin kita diaktifkan, jenis posting akan selalu didaftarkan dari init
hook.
Ini adalah contoh menyedihkan dari Codex yang tersebar di mana-mana. Secara umum, WordPress memang memiliki dokumentasi yang baik, tetapi jika ada sesuatu yang tampak sia-sia atau tidak logis, jangan takut untuk melakukan riset sendiri.
Membuat Tabel Database
Tugas lain yang dilakukan beberapa plugin adalah membuat tabel database. Lebih sering daripada tidak, ini tidak perlu, tetapi ada beberapa kasus penggunaan yang sah.
Contoh dari artikel Codex tentang Membuat Tabel ini menunjukkan bagaimana beberapa panggilan aktivasi dapat digunakan:
Fungsi pertama, jal_install()
membuat tabel database baru. Fungsi kedua, jal_install_data
menambahkan data awal ke tabel. Alih-alih menggunakan register_activation_hook()
untuk menambahkan satu fungsi yang berisi semua kode ini, kita dapat menggunakan register_activation_hook
beberapa kali.
Ini adalah praktik yang bagus untuk modularitas. Di satu sisi, Anda tidak perlu menambahkan data pengujian awal – semudah melepas kait aktivasi – sehingga Anda dapat menjaga fungsi tetap utuh. Di sisi lain, Anda bebas menggunakan kembali fungsi-fungsi ini di mana saja karena terpisah.

Pemeriksaan Ketergantungan
Tugas umum lainnya untuk fungsi aktivasi adalah memeriksa dependensi. Plugin Anda mungkin bergantung pada versi WordPress tertentu, plugin lain, atau bahkan versi PHP tertentu.
Kode di bawah ini memeriksa versi WP dan PHP minimum dan mengarahkan ulang pengguna (tanpa mengaktifkan plugin) jika perlu:
Kait Penonaktifan
Kait penonaktifan berjalan ketika pengguna telah menonaktifkan sebuah plugin, tetapi sebelum itu dihapus (dihapus). Kait penonaktifan digunakan dengan cara yang sama seperti kait pengaktifan:
Penonaktifan berarti bahwa pengguna hanya menonaktifkan plugin Anda, jadi Anda tidak ingin melakukan sebanyak yang Anda lakukan saat mencopot pemasangan. Anda mungkin ingin menghapus aturan penulisan ulang, tetapi pada tahap ini, Anda tidak ingin menyingkirkan semua opsi dan tabel database Anda (jika ada).
Ini cukup mudah tetapi saya akan memberikan perhatian khusus pada aturan penulisan ulang pembilasan karena, sekali lagi, ini bermasalah.
Codex merekomendasikan untuk melakukannya seperti yang ditunjukkan di bawah ini, tetapi ini tidak berhasil :
Alasan ini tidak berhasil sama seperti sebelumnya. Menjalankan penonaktifan melakukan init
hook, yang berarti bahwa saat kami menonaktifkan plugin kami, kami juga mendaftarkan jenis posting kustom kami. Aturan penulisan ulang dihapus, tetapi mereka memperhitungkan jenis posting khusus.
Tiket Trac tersedia untuk mengatasi ini, tetapi sampai saat itu, saya tidak bisa memberi Anda cara yang sangat baik untuk melakukan ini. Satu-satunya cara yang saya temukan berhasil adalah dengan menghapus aturan penulisan ulang sama sekali:
Meskipun ini berhasil untuk saya di masa lalu, saya tidak akan merekomendasikannya. Ini menimbulkan ketidakpastian yang lebih besar daripada masalah memiliki beberapa aturan penulisan ulang tambahan. Saya lebih suka menampilkan catatan kepada pengguna yang meminta mereka untuk mengunjungi pengaturan tautan permanen setelah penonaktifan, yang akan menghapus aturan penulisan ulang. Sampai solusi yang lebih baik diterapkan, kami terjebak dengan ini… maaf!
Kait Penghapusan Instalasi
Ada dua cara untuk menjalankan kode saat mencopot pemasangan plugin. Anda dapat menggunakan kait penghapusan instalasi melalui register_uninstall_hook()
atau Anda dapat menggunakan file uninstall.php
khusus di dalam plugin Anda. Saya akan menunjukkan kepada Anda berdua, tetapi metode yang lebih disukai adalah menggunakan file uninstall.
Masalah utama dengan pengait pencopotan adalah bahwa “itu mencegah file plugin utama dijalankan selama pencopotan, yang dapat menjadi masalah jika plugin menjalankan kode di ruang global. Ini juga lebih baik karena kode uninstall terpusat. ” – Scott Riley
Kode di bawah ini menunjukkan proses penghapusan instalasi menggunakan kait dasar:
Seperti yang dibahas, ini bukan solusi terbaik. Cara yang jauh lebih baik untuk menangani penghapusan instalasi adalah dengan menggunakan file uninstall.php
. Yang perlu Anda lakukan adalah membuatnya dan itu akan digunakan jika tersedia.
Seperti yang Anda lihat, ini sebenarnya solusi yang lebih sederhana. Terbaik dari semua, itu mandiri.
Keamanan Tambahan
Saya tidak ingin terlalu memperumit contoh yang ditampilkan sejauh ini dengan masalah terkait keamanan, tetapi Anda benar-benar harus mengambil beberapa langkah untuk memastikan bahwa hanya mereka yang diizinkan yang dapat menjalankan tindakan ini.
Gunakan cuplikan berikut pada aktivasi dan penonaktifan:
Blok kode ini memastikan bahwa pengguna memiliki izin untuk melakukan tindakan ini dan bahwa tindakan tersebut berasal dari halaman yang tepat. Ini harus melindungi dari sebagian besar upaya jahat.
Proses penghapusan instalasi bersifat khusus, jadi kita perlu menggunakan kode yang sedikit berbeda:
Saatnya Membersihkan
Jika plugin Anda menambahkan sesuatu ke WordPress, maka tugas Anda sebagai pengembang untuk menghapusnya saat pengguna memutuskan untuk menghapus plugin Anda.
Menggunakan metode aktivasi, penonaktifan, dan penghapusan instalasi yang diuraikan di atas akan memungkinkan Anda membangun sistem yang melakukan ini dengan aman dan terjamin. Saya juga sangat merekomendasikan membaca utas Stackexchange ini, yang menguraikan proses ini di lingkungan OOP.
Jika Anda belum menjadi anggota WPMU DEV, daftar hari ini untuk uji coba gratis, sepenuhnya bebas risiko. Sebagai anggota, Anda akan mendapatkan akses ke semua plugin hebat kami dan layanan hosting yang sangat cepat, ditambah dukungan ahli 24/7 untuk semua pertanyaan dan masalah terkait WordPress Anda.
Tag: