Apakah ada beberapa dokumentasi di suatu tempat yang menjelaskan bagaimana siklus hidup plugin?
Saya memulai plugin baru dengan gaya OOP, dan saya baru tahu bahwa kelas utama saya banyak di- instanciated (terima kasih kepada Xdebug dan Netbeans).
Saya bertanya-tanya mengapa, dan itu mengganggu saya karena saya meng-instanci objek Dropbox-API, dan saya benar-benar tidak berpikir WordPress hanya akan membuat kelas utama saya terlalu banyak.
Saya belum menemukan sesuatu yang berhubungan dengan siklus hidup plugin di Codex maupun di Google.
plugin-development
codex
RitonLaJoie
sumber
sumber
Jawaban:
Apa arti 'gaya OOP' bagi Anda? Membungkus semua fungsi Anda dengan pernyataan kelas? Maka Anda salah melakukannya. Anda salah menggunakan kelas sebagai namespace.
Hah?
Cobalah dan hitung jumlah file yang dibuat. Jika saya mencobanya, ada satu file yang dibuat untuk setiap permintaan halaman. Ini berarti, hanya satu instance kelas Foo untuk setiap permintaan halaman.
Mari kita coba panggilan aksi
Jika saya melihat di dir konten wp saya, saya menemukan dua file. Tidak lagi. Satu file dibuat ketika instance kelas dibuat. Dan satu dibuat ketika panggilan aksi dilakukan.
OK, mari kita lakukan beberapa hal bodoh dengan contoh kita. Hapus
add_action( 'plugins_loaded', .. )
dan tambahkan kode ini sebagai gantinya:Berapa banyak file yang Anda harapkan? Saya mengharapkan dua. Satu dari konstruktor, satu dari metode.
Mesin virtual baru dibuat hanya ketika
new
operator digunakan.Sekarang saya menghitung empat file. Dua dari konstruktor dan dua dari metode. Ini karena WordPress pertama memasukkan plugin dan kemudian melakukan hook tindakan
plugins_loaded
.Praktik terbaik adalah dengan menggunakan kait tindakan
plugins_loaded
alih-alih membuat turunan dari suatu fungsi karena, jika file plugin disertakan di mana saja (misalnya dalam file plugin lainnya), instance kelas baru dibuat setiap kali file disertakan. Kait tindakanplugins_loaded
dilakukan hanya sekali untuk setiap permintaan halaman.sumber
Apa yang mungkin terjadi adalah Anda menyerahkan salinan kelas Anda ke filter atau tindakan. Misalnya, jika Anda ingin secara langsung mengubah variabel kelas di dalam sebuah kail atau filter Anda juga harus melewati kail dengan referensi
dari pada
Seperti yang disebutkan oleh bainternet, Anda juga dapat menggunakan pola singleton untuk memastikan bahwa objek tertentu hanya akan dimunculkan sekali saja (panggilan selanjutnya mengembalikan referensi ke objek itu).
Anda juga dapat mempertimbangkan membuat beberapa fungsi statis (dengan memberi mereka kata kunci statis. Ini biasanya dilakukan untuk fungsi 'pembantu' yang tidak berinteraksi dengan anggota kelas lainnya. Metode statis dapat dipanggil tanpa memunculkan kelas.
Anda juga dapat meneruskan fungsi statis ke tindakan / filter:
Saya juga memeriksa http://codex.wordpress.org/Plugin_API/Action_Reference dan menemukan bahwa plugin hanya dapat dimuat pada dua tahap dalam permintaan (muplugins_loaded dan plugins_loaded).
sumber