Semua dokumentasi yang saya temui membahas fungsi pluggable utama melalui plugin Anda.
Bagaimana jika Anda melakukan pengembangan tema?
Functions.php saya memerlukan file lain yang mengesampingkan get_user_by()
fungsi, didefinisikan dalam pluggable.php
.
Jika saya menghilangkan if( function_exists() )
panggilan, saya mendapatkan kesalahan "Tidak dapat mendeklarasikan ulang ...".
Jika saya memasukkan if( function exists() )
panggilan, maka saya tidak mendapatkan kesalahan, tetapi tentu saja fungsi saya kemudian diabaikan, karena versi pluggable ada.
Berdasarkan posting Dominic yang luar biasa pada urutan startup WordPress , jelas yang pluggable.php
dimuat sebelum tema Anda functions.php
dan sebagainya, sehingga menjelaskan kesalahan.
Jadi pertanyaannya adalah - bagaimana Anda bisa mengambil keuntungan dari arsitektur pluggable yang bagus dari dalam suatu tema, tanpa harus menulis plugin yang kemudian harus dibundel atau diinstal dengan tema?
Catatan lebih lanjut : Jadi nampaknya argumennya adalah bahwa tema tidak boleh mencoba melakukan apa yang dilakukan plugin. Tapi argumen itu sudah lebih dari empat tahun (menurut nomor trac 4 digit). Saya ingin mendengar dari beberapa pemukul berat apakah filosofi ini masih berlaku, mengingat topologi kompleks dari lanskap pengembangan tema saat ini. Saya ingin percaya bahwa kita telah berevolusi sejak saat itu.
Konteks : Saya sedang mengembangkan solusi CMS satu kali untuk pelanggan, dengan banyak metadata khusus, kustomisasi Admin back-end, proses login / otentikasi, pekerjaan. Dan tentu saja, ada komponen desain - di situlah bagian tema masuk. Faktanya, ini adalah komponen yang tidak dapat digunakan kembali - mereka tidak akan pernah berlaku untuk klien lain, mereka tidak akan pernah ditempatkan di bawah GPL dan open source, dan mereka yang paling tentu saja tidak akan didistribusikan / diinstal pada penyebaran WordPress lainnya. Paling-paling ada beberapa praktik terbaik yang akan saya manfaatkan pada proyek-proyek masa depan, tetapi itu hanya akan menjadi pekerjaan referensi / salin-tempel.
Ini kedengarannya bukan kasus penggunaan untuk plugin bagi saya. Tema diinstal, mungkin tema anak dari Twenty Eleven, mungkin mandiri, fungsinya. Php panggilan dalam satu kapal berisi, masing-masing menangani aspek yang berbeda dari CMS yang bersangkutan. Kemudian file templat tema menggunakan 'templat tag' khusus yang ditentukan di dalamnya. Saya tidak ingin memiliki file tema dengan dependensi pada beberapa plugin atau yang sedang diaktifkan, dll. Itu tidak masuk akal untuk membangun kompleksitas ke dalam sistem. Tentu, saya dapat meletakkannya di folder plug-in yang harus digunakan, tetapi itu masih terasa seperti hack - sekarang, semua yang ada hubungannya dengan penyesuaian yang dibuat untuk proyek ini terkandung di dalamnya wp-content/themes/my-theme/
. Saya juga tidak mau harus mempertimbangkan untuk mencari hal-hal di beberapa folder plugin juga.
Jangan salah sangka. Saya suka plugin dan saya menggunakannya dan menulisnya. Dan saya menggunakan plugin dalam hubungannya dengan pengembangan tema yang sangat dikustomisasi ketika plugin ini adalah pihak ketiga dan mewakili praktik terbaik jauh melampaui apa yang saya bisa jalankan dalam jangka waktu yang masuk akal. Tetapi ketika saya perlu memodifikasi fungsionalitas inti untuk skenario satu kali, saya beralih ke kait tindakan, kait filter, dan saya ingin dapat mengandalkan fungsi yang dapat dicolokkan bagi pengguna dan sisi otentikasi hal-hal juga.
sumber
Jawaban:
Jika Anda membangun ini untuk satu klien, Anda harus benar-benar memanfaatkannya
mu-plugins
.Ada banyak hal di WordPress yang tidak dapat Anda lakukan
functions.php
. Fungsi pluggable adalah salah satunya, tetapi lebih jelas, sejumlah kait (baik aksi dan filter) menyala sebelumnyafunctions.php
. Dalam beberapa kasus, kait ini bahkan menyala sebelum plugin biasa, yang kemudian mengharuskan Anda untuk menggunakanmu-plugins
atau plugin yang diaktifkan jaringan. Masih dalam beberapa kasus lain, bahkan plugin-mu sudah terlambat. Mungkin Anda membutuhkan sesuatusunrise.php
. Atau bahkan sesuatu (konstan atau sebaliknya) diwp-config.php
.Saya lebih suka menambahkan beberapa kait ke fungsi pluggable, daripada membuatnya lebih mudah untuk menimpanya. Kami sepertinya tidak akan pernah lagi memiliki fungsi pluggable lainnya - mereka kait pre-date dan saya hampir tidak pernah melihat situasi di mana ada keuntungan bagi mereka daripada hook kuno (mode baru?) Yang bagus.
Saya masih setuju, enam tahun kemudian, dengan Andy Skelton - "Ada banyak perbedaan antara file fungsi tema dan sebuah plugin. Mari tetap seperti itu."
Selain itu, perubahan seperti ini tidak akan pernah terjadi. Itu akan menghancurkan banyak hal. Tema yang tak terhitung jumlahnya memanggil fungsi dalam tubuh
functions.php
yang akan menghasilkan kesalahan fatal jikapluggable.php
belum dimuat - seperticurrent_user_can()
, atauwp_create_nonce()
. Mereka semua gagal. Dan itu akan merusak plugin, yang biasanya bisa mulai memanggil fungsi-fungsi iniplugins_loaded
. (Hanya bergerakpluggable.php
lebih rendahwp-settings.php
dan saya yakin setengah dari inti akan pecah - atau paling tidak, penyesuai akan.)Akhirnya, ada ide yang tak terelakkan bahwa sebuah tema dapat menyertakan file terpisah seperti
pluggable.php
yang dapat kita muat sedini kita memuat plugin, dan karena itu dapat mengesampingkan fungsi yang dapat dicolokkan. Selain ini merupakan ide yang buruk (lihat empat paragraf pertama dari komentar ini), itu masih belum kompatibel, karena sampaisetup_theme
pengait, orang dapat mengganti tema mana yang akan dimuat dengan memfilter stylesheet dan nilai template.Sayangnya, ini tidak dapat dipertahankan mengingat bagaimana WordPress dirancang. Hal yang baik adalah, ada banyak cara (yang lebih baik) untuk melakukannya.
(Awalnya diposting di sini: http://core.trac.wordpress.org/ticket/2479#comment# )
sumber
Dalam konteks proyek sekali saja, sangat tepat untuk memasukkan kode yang harus digunakan
mu-plugins
. Jika "memiliki semuanya di satu tempat" adalah masalah, buat saja symlink di tema dir kemu-plugins
drop-in, jadi itu akan muncul saat mencari direktori tema.sumber
Saya tidak bisa memikirkan cara untuk mencapai ini, terlalu dini dalam urutan pemuatan.
Yang paling dekat dengan solusi waras adalah menambahkan custom include to
wp-config.php
(dengan kode atau meminta pengguna), tetapi membandingkannya dengan bundling plugin mungkin akan lebih masuk akal.sumber