Tugas
Anda dapat mendaftar dan menambah direktori Tema menggunakan register_theme_directory()
untuk instalasi WP Anda. Sayangnya core tidak memberikan fungsi yang sama untuk plugin. Kami sudah memiliki MU-Plugin, Drop-Ins, Plugins dan Tema. Tetapi kami membutuhkan lebih banyak untuk organisasi file yang lebih baik.
Inilah daftar tugas yang harus dicapai:
- Tambahkan direktori plugin tambahan
- Untuk setiap direktori plugin, "tab" baru diperlukan seperti yang ditunjukkan di sini [1]
- Direktori tambahan akan memiliki fungsi yang sama dengan direktori plugin default
Apa yang ada di sana untukmu?
Jawaban terbaik dan terlengkap akan diberikan hadiah.
[1] Tab tambahan untuk folder / direktori plugin baru
plugins
plugin-development
directory
kaisar
sumber
sumber
get_themes()
ke kelas.Jawaban:
Oke, saya akan coba ini. Beberapa batasan yang saya temui di sepanjang jalan:
Tidak ada banyak filter dalam subkelas WP_List_Table, setidaknya tidak di tempat yang kita inginkan.
Karena kurangnya filter, kami tidak dapat mempertahankan daftar tipe plugin yang akurat di bagian atas.
Kita juga harus menggunakan beberapa hack JavaScript yang mengagumkan (baca: kotor) untuk menampilkan plugin sebagai aktif.
Saya membungkus kode area admin saya di dalam kelas, jadi nama fungsi saya tidak diawali. Anda dapat melihat semua kode ini di sini . Silakan berkontribusi!
API pusat
Hanya fungsi sederhana yang mengatur variabel global yang akan berisi direktori plugin kami dalam array asosiatif. Ini
$key
akan menjadi sesuatu yang digunakan secara internal untuk mengambil plugin, dll.$dir
Adalah path lengkap atau sesuatu yang relatif terhadapwp-content
direktori.$label
akan menjadi untuk tampilan kami di area admin (mis. string yang dapat diterjemahkan).Maka, tentu saja, kita perlu memuat plugin. Menghubungkan ke
plugins_loaded
jalan terlambat dan pergi melalui plugin aktif, memuat masing-masing.Area Admin
Mari kita atur fungsionalitas kita di dalam kelas.
Kita akan terhubung ke
plugins_loaded
awal dan mengatur "tindakan" yang diizinkan yang akan kita gunakan. Ini akan menangani aktivasi dan penonaktifan plugin karena fungsi bawaan tidak dapat melakukannya dengan direktori khusus.Lalu ada fungsi yang terhubung
load-plugins.php
. Ini melakukan semua hal yang menyenangkan.Mari kita bahas satu per satu. yang
get_plugins
metode, adalah bungkus sekitar fungsi lain. Itu mengisi atributplugins
dengan data.cd_apd_get_plugins
adalah rip dariget_plugins
fungsi bawaan tanpa hardcodedWP_CONTENT_DIR
danplugins
bisnis. Pada dasarnya: dapatkan direktori dari$wp_plugin_directories
global, buka, cari semua file plugin. Simpan di cache untuk nanti.Selanjutnya adalah bisnis sial untuk benar-benar mengaktifkan dan menonaktifkan plugin. Untuk melakukan ini, kami menggunakan
handle_actions
metode. Ini, sekali lagi, secara terang-terangan diambil dari bagian ataswp-admin/plugins.php
file inti .Beberapa fungsi kustom di sini lagi.
cd_apd_activate_plugin
(ripped off fromactivate_plugin
) dancd_apd_deactivate_plugins
(ripped off fromdeactivate_plugins
). Keduanya sama dengan fungsi "induk" masing-masing tanpa direktori kode keras.Dan fungsi penonaktifan
Ada juga
cd_apd_validate_plugin
fungsi, yang tentunya merupakan perampasanvalidate_plugin
tanpa sampah kode keras.Baiklah, dengan hal itu. Kita sebenarnya dapat mulai berbicara tentang tampilan tabel daftar
Langkah 1: tambahkan pandangan kami ke daftar di bagian atas tabel. Ini dilakukan dengan memfilter
views_{$screen->id}
di dalaminit
fungsi kita .Kemudian fungsi bengkok yang sebenarnya hanya loop melalui
$wp_plugin_directories
. Jika salah satu direktori yang baru terdaftar memiliki plugin, kami akan memasukkannya di layar.Hal pertama yang perlu kita lakukan jika kita melihat halaman direktori plugin kustom adalah menyaring tampilan lagi. Kita perlu menyingkirkan
inactive
hitungan karena itu tidak akan akurat. Konsekuensi dari tidak adanya filter di mana kita membutuhkannya. Hubungkan lagi ...Dan pengaturan cepat ...
Selanjutnya, mari kita singkirkan plugin yang seharusnya Anda lihat di tabel daftar, dan ganti dengan plugin khusus kami. Hubungkan ke
all_plugins
.Karena kami sudah menyiapkan plugin dan data kami (lihat di
setup_plugins
atas),filter_plugins
metode hanya (1) menyimpan hitungan pada semua plugin untuk nanti, dan (2) menggantikan plugin di tabel daftar.Dan sekarang kita akan membunuh aksi massal. Ini bisa dengan mudah didukung, saya kira?
Tautan tindakan plugin default tidak akan berfungsi untuk kami. Jadi alih-alih, kita perlu mengatur sendiri (dengan tindakan kustom, dll). Dalam
init
fungsinya.Satu-satunya hal yang bisa diubah di sini adalah (1) kami mengubah tindakan, (2) menjaga status plugin, dan (3) sedikit mengubah nama nonce.
Dan akhirnya, kita hanya perlu membuat beberapa JavaScript untuk menambahkannya. Dalam
init
fungsi lagi (semua bersama-sama saat ini).Saat memberikan JS kami, kami juga akan menggunakan
wp_localize_script
untuk mendapatkan nilai dari jumlah total "semua plugin".Dan tentu saja, JS hanyalah beberapa peretasan yang bagus untuk membuat tabel daftar aktif / tidak aktif untuk ditampilkan dengan benar. Kami juga akan menempel jumlah yang benar dari semua plugin kembali ke
All
tautan.Bungkus
Pemuatan direktori plugin tambahan sebenarnya tidak menarik. Membuat tabel daftar untuk ditampilkan dengan benar adalah bagian yang lebih sulit. Saya masih belum sepenuhnya puas dengan hasilnya, tapi mungkin seseorang dapat memperbaiki kodenya
sumber
__return_empty_array()
.__return_empty_array
fungsinya!Saya pribadi tidak tertarik memodifikasi UI, tapi saya suka tata letak sistem file yang lebih teratur, karena beberapa alasan.
Untuk itu, pendekatan lain adalah menggunakan symlink.
Anda bisa mengatur plugin khusus Anda
plugins-custom
, yang bisa menjadi bagian dari repositori kontrol versi proyek Anda.Kemudian Anda dapat menginstal dependensi pihak ketiga ke
plugins-external
(melalui Komposer, atau Git submodules, atau apa pun yang Anda inginkan).Kemudian Anda bisa memiliki skrip Bash sederhana atau perintah WP-CLI yang memindai direktori tambahan, dan membuat symlink
plugins
untuk setiap subfolder yang ditemukannya.plugins
masih akan berantakan, tetapi itu tidak masalah karena Anda hanya perlu berinteraksi denganplugins-custom
danplugins-external
.Penskalaan ke
n
direktori tambahan akan mengikuti proses yang sama dengan dua yang pertama.sumber
Atau Anda juga dapat menggunakan KOMPOSER dengan jalur direktori khusus disetel untuk menunjuk ke folder konten-wp. Jika itu bukan jawaban langsung dari pertanyaan Anda adalah cara baru berpikir wordpress, beralihlah ke komposer sebelum memakan Anda.
sumber