Ini bukan pertanyaan tentang bagaimana membangun plugin WordPress. Alih-alih, apa, jika ada, panduan dapat diterapkan pada cara menyusun arsitektur file plugin apa pun.
Beberapa bahasa atau pustaka pemrograman lain memiliki cara yang sangat terkontrol dalam mengatur direktori dan file. Terkadang hal ini menjengkelkan dan menyoroti kebebasan yang ditawarkan PHP, tetapi di sisi lain plugin WordPress disatukan dengan cara apa pun yang ditentukan oleh penulisnya.
Tidak ada jawaban yang benar , tetapi harapan saya adalah untuk memperbaiki bagaimana saya, dan orang lain, membangun plugin untuk membuatnya lebih ramah bagi pengembang lain untuk diseksi, lebih mudah untuk debug, lebih mudah dinavigasi, dan mungkin lebih efisien.
Pertanyaan terakhir: menurut Anda apa cara terbaik untuk mengatur plugin?
Berikut adalah beberapa struktur sampel, tetapi daftar lengkapnya sama sekali tidak lengkap. Jangan ragu untuk menambahkan rekomendasi Anda sendiri.
Diasumsikan Struktur Default
/wp-content
/plugins
/my-plugin
my-plugin.php
Metode Model View Controller (MVC)
/wp-content
/plugins
/my-plugin
/controller
Controller.php
/model
Model.php
/view
view.php
my-plugin.php
Tiga bagian MVC:
- The Model berinteraksi dengan database, query dan menyimpan data, dan berisi logika.
- The kontroler akan berisi tag template dan fungsi bahwa pandangan akan memanfaatkan.
- The pandangan bertanggung jawab untuk menampilkan data yang diberikan oleh model yang dibangun oleh controller.
Diatur berdasarkan metode jenis
/wp-content
/plugins
/my-plugin
/admin
admin.php
/assets
css/
images/
/classes
my-class.php
/lang
my-es_ES.mo
/templates
my-template.php
/widgets
my-widget.php
my-plugin.php
Plugin WordPress Boilerplate
Tersedia di Github
Berdasarkan pada API Plugin , Standar Pengkodean , dan Standar Dokumentasi .
/wp-content
/plugins
/my-plugin
/admin
/css
/js
/partials
my-plugin-admin.php
/includes
my_plugin_activator.php
my_plugin_deactivator.php
my_plugin_i18n.php
my_plugin_loader.php
my_plugin.php
/languages
my_plugin.pot
/public
/css
/js
/partials
my-plugin-public.php
LICENSE.txt
README.txt
index.php
my-plugin.php
uninstall.php
Metode yang terorganisir secara longgar
/wp-content
/plugins
/my-plugin
css/
images/
js/
my-admin.php
my-class.php
my-template.php
my-widget.php
my-plugin.php
sumber
css/
,images/
danjs/
akanstyles/
,images/
, danscripts/
.Jawaban:
Perhatikan bahwa semua plugin adalah "pengontrol" menurut standar WP.
Itu tergantung pada apa yang seharusnya dilakukan oleh plugin, tetapi dalam semua kasus saya akan mencoba untuk memisahkan output layar dari kode PHP sebanyak mungkin.
Inilah salah satu cara untuk melakukannya dengan mudah - pertama, tentukan fungsi yang memuat template:
Sekarang, jika plugin menggunakan widget untuk menampilkan data:
Templat:
File:
Di mana Anda meletakkan CSS, JS, gambar, atau bagaimana Anda mendesain wadah untuk kait itu kurang penting. Ini masalah preferensi pribadi saya kira.
sumber
Itu tergantung pada plugin. Ini adalah struktur dasar saya untuk hampir setiap plugin:
Ini akan menjadi sesuatu yang masuk dalam
lib
folder.Jika itu plugin yang sangat kompleks, dengan banyak fungsi admin area, saya akan menambahkan
admin
folder untuk memuat semua file PHP itu. Jika plugin melakukan sesuatu seperti mengganti file tema yang disertakan , mungkin ada foldertemplate
atautheme
juga.Jadi, struktur direktori mungkin terlihat seperti ini:
sumber
IMHO, rute termudah, paling kuat, dan paling bisa dikelola adalah dengan menggunakan struktur MVC, dan WP MVC dirancang untuk membuat penulisan plugin MVC sangat mudah (saya agak bias, meskipun ...). Dengan WP MVC, Anda cukup membuat model, tampilan, dan pengontrol, dan semua yang lain ditangani di belakang layar untuk Anda.
Kontroler dan tampilan yang terpisah dapat dibuat untuk bagian publik dan admin, dan keseluruhan kerangka kerja mengambil manfaat dari banyak fitur asli WordPress. Struktur file dan banyak fungsionalitasnya persis sama dengan yang ada di kerangka kerja MVC paling populer (Rails, CakePHP, dll).
Info lebih lanjut dan tutorial dapat ditemukan di sini:
sumber
Kami menggunakan campuran semua metode. Pertama-tama, kami menggunakan Zend Framework 1.11 di plugin kami dan oleh karena itu kami harus menggunakan struktur yang sama untuk file kelas karena mekanisme pengisian otomatis.
Struktur plugin inti kami (yang digunakan oleh semua plugin kami sebagai basis) terlihat mirip dengan ini:
webeo-core.php
file di folder root plugin.Webeo_CoreLoader
kelas di dalam file ini, yang menetapkan beberapa konstanta plugin, menginisialisasi autoloader kelas dan melakukan panggilan ke metode pengaturanCore.php
kelas di dalamlib/Webeo
folder. Ini berjalan padaplugins_loaded
kait tindakan dengan prioritas9
.Core.php
kelas file bootstrap plugin kami. Nama ini didasarkan pada nama plugin.Seperti yang Anda lihat, kami memiliki subdirektori di dalam
lib
folder untuk semua paket vendor kami (Webeo
,Zend
). Semua sub paket di dalam vendor adalah struktur oleh modul itu sendiri. UntukMail Settings
formulir admin baru , kami memiliki struktur berikut:Sub-plugin kami memiliki struktur yang sama dengan satu pengecualian. Kami melangkah lebih jauh ke dalam folder vendor karena untuk menyelesaikan konflik penamaan selama acara autoload. Kami juga menyebut plugrap boostrap sebagai
E.g. Faq.php
prioritas10
di dalamplugins_loaded
hook.Saya mungkin akan mengganti nama
lib
folder menjadivendors
dan memindahkan semua folder publik (css, gambar, js, bahasa) ke folder bernamapublic
dalam rilis berikutnya.sumber
Seperti yang sudah dijawab oleh banyak orang di sini. Itu benar-benar tergantung pada apa yang seharusnya dilakukan oleh plugin, tetapi di sini adalah struktur dasar saya:
sumber
Saya sebagian dengan tata letak plugin berikut, tetapi biasanya berubah tergantung pada apa persyaratan plugin.
Saya belum membuat plugin WordPress yang membutuhkan arsitektur gaya MVC tetapi jika saya ingin melakukan ini saya akan meletakkannya dengan direktori MVC terpisah, yang itu sendiri berisi pandangan / pengontrol / model.
sumber
Logika saya, semakin besar plugin, semakin banyak struktur yang saya gunakan.
Untuk plugin besar saya cenderung menggunakan MVC.
Saya menggunakan ini sebagai titik awal dan melewati apa yang tidak diperlukan.
sumber
Semua plugin saya mengikuti struktur ini, yang tampaknya sangat mirip dengan apa yang dilakukan kebanyakan pengembang lain:
plugin-folder.php biasanya merupakan kelas yang memuat semua file yang diperlukan dari inti / folder. Paling sering di kait init atau plugins_loaded.
Saya dulu awalan semua file saya juga, tetapi seperti @kaiser disebutkan di atas, itu benar-benar berlebihan dan saya baru-baru ini memutuskan untuk menghapusnya dari setiap plugin di masa depan.
Perpustakaan / folder menyimpan semua perpustakaan penolong eksternal yang bergantung pada plugin.
Bergantung pada plugin, mungkin ada file uninstall.php di root plugin juga. Namun, sebagian besar waktu ini ditangani melalui register_uninstall_hook ().
Jelas, beberapa plugin mungkin tidak memerlukan file admin atau template, dll, tetapi struktur di atas berfungsi untuk saya. Pada akhirnya Anda hanya perlu menemukan struktur yang berfungsi untuk Anda dan kemudian tetap menggunakannya.
Saya juga memiliki plugin pemula, berdasarkan pada struktur di atas yang saya gunakan sebagai titik awal untuk semua plugin saya. Yang perlu saya lakukan adalah melakukan pencarian / ganti untuk awalan fungsi / kelas dan pergilah. Ketika saya masih awalan file saya itu adalah langkah tambahan yang harus saya lakukan (dan cukup mengganggu pada saat itu), tapi sekarang saya hanya perlu mengganti nama folder plugin dan file plugin utama.
sumber
Juga, lihat boilerplate widget WP yang bagus ini . Ini memberi petunjuk besar pada struktur (bahkan jika tidak ada kelas atau folder untuk model terpisah).
sumber
Pendekatan yang kurang umum untuk penataan file dan direktori plugin adalah pendekatan tipe file. Layak disebutkan di sini untuk kelengkapan:
Setiap direktori hanya berisi file jenis itu. Perlu dicatat bahwa pendekatan ini gagal ketika Anda memiliki banyak jenis file
.png .gif .jpg
yang mungkin lebih logis diajukan di bawah satu direktori,images/
misalnya.sumber