Salah satu tema Wordpress saya memerlukan beberapa plugin pihak ketiga untuk berjalan dengan benar.
Sebagian besar waktu saya digunakan untuk memanggil fungsi dari plugin pihak ketiga menggunakan pernyataan kondisional seperti
if(function_exist('plugin_function')) {
plugin_function() // do something
}
misalkan saya perlu menggunakan satu plugin secara ekstensif melalui banyak file tema saya ... saya ingin menghindari menggunakan banyak kondisi JIKA ... apakah ada cara yang tepat untuk meminta plugin spesifik tertentu untuk dipasang di WP atau bahkan menginstalnya dengan lebih baik jika mereka hilang sebelum mengaktifkan tema?
Terima kasih
sumber
function_exists
, maka pengguna normal hanya akan mendapatkan pesan, bahwa dia belum menginstal plugin yang bergantung pada plugin lain. Masalahnya adalah, bahwa pengguna benar - benar akan menginstal plugin dan kemudian bertanya-tanya mengapa itu tidak berfungsi . Oh, dan aku tidak akan menurunkan kamu untuk itu.Meskipun ini tidak akan mencegah tema dari pecah ketika plugin dinonaktifkan, saya akan melihat artikel ini tentang plugin "Cara Menampilkan Pemberitahuan Admin untuk Tema yang Diperlukan" . Saya tidak pernah merasa nyaman dengan gagasan tentang tema yang memaksa plugin untuk diinstal, dan jadi ini sepertinya pilihan terbaik berikutnya.
Pikiran cepat lainnya: Saya belum pernah mencoba ini, tetapi saya ingin tahu apakah Anda dapat menemukan cara cerdas untuk memasang beberapa kait dalam satu kondisi. Mungkin Anda dapat memisahkan semua fungsi kondisional dalam file yang berbeda dan hanya memerlukannya jika
if( function_exists( 'plugin_function' ) )
kembalitrue
(dengan pengertian bahwa ini adalah pemeriksaan yang tidak sempurna.sumber
Jika Anda hanya membutuhkan halaman plugin, maka ada
is_plugin_active()
. Jika Anda membutuhkannya di luar, Anda lebih baik menyalin / menempelkan fungsi inti ke tema Anda dan kemudian menggunakannya kembali:Persyaratan menghindari kesalahan dengan mendefinisikan fungsi dua kali lipat.
sumber
if(function_exist('plugin_function'))
denganif(is_plugin_active('plugin-file.php'))
Catatan: Jawaban ini hanya ada di sini untuk mempermudah diskusi antara @scribu dan @kaiser. Mod: Tolong jangan hapus. Pengguna / Pembaca: Tolong jangan memilih. Jika Anda ingin mengikuti diskusi, lihat log revisi / edit. Jika Anda ingin bergabung dalam diskusi, edit Jawabannya. Jika diskusi memiliki hasil, maka itu akan ditandai seperti itu. Terima kasih.
Skenario
Ada juga berbagai skenario yang bobotnya berbeda, di mana Anda bisa memiliki ketergantungan plugin. (Contohnya hanya fiksi). Kata "(induk) Plugin" dapat ditukar dengan "Tema" dari sudut pandang orang tua.
Berikut ini saya mencoba untuk membuat sketsa apa yang terjadi ketika Anda memperbarui plugin "lain" dan cek tidak berfungsi lagi.
Memeriksa
Ada tiga kemungkinan untuk diperiksa, jika Anda ingin tahu apakah plugin aktif:
'active_plugins'
- ada?Jika saya sekarang menggunakan Plugin Pemeriksa Tautan Internal saya sebagai contoh, yang tidak menawarkan API publik dan tidak dimaksudkan untuk diperpanjang, maka saya tidak melihat alasan (sebagai penulis) untuk tidak mengubah penamaan fungsi internal sesuai permintaan atau hanya atas kehendak . Jadi, jika seseorang akan mencoba untuk mendukung piggyback pada plugin ini, maka hal-hal akan rusak (tergantung pada fungsionalitas dan ketatnya bundling) pada pembaruan. Hal yang sama berlaku untuk nama file. Saya tidak punya alasan nyata (selain itu plugin akan dinonaktifkan pada pembaruan) untuk tidak mengubah nama file. Satu-satunya hal yang akan menahan saya untuk mengubah nama folder adalah bahwa pemeriksaan pembaruan & pemberitahuan berjalan terhadap nama file - jika itu di-host di repo resmi.
Jadi saya akan mengatakan dari bagian terlemah (mudah diubah) ke terberat (banyak yang menentang perubahan) dari plugin (induk) adalah:
fungsi »nama file utama» folder
Ketika saya mengatakan bahwa pemeriksaan fungsi kurang rapuh daripada menggunakan,
is_plugin_active()
saya berasumsi bahwa fungsi yang dimaksud adalah yang didorong oleh pembuat plugin secara eksplisit. Contoh utama dari ini adalahwp_pagenavi()
tag template yang ditawarkan oleh plugin WP-PageNavi.Kesulitan dalam mendefinisikan dependensi adalah bahwa tidak ada cara standar untuk secara unik mengidentifikasi plugin yang tidak melibatkan nama file.
Lebih banyak pemikiran tentang subjek:
http://wordpress.org/support/topic/plugin-plugin-dependencies-unr reliable-plugin-namingidentifying-scheme
Saya kira kita sejauh ini dapat merangkumnya dalam tiga poin:
Cara (sejauh ini) paling cerdas yang dapat saya pikirkan, yang telah saya lihat di beberapa (terlalu banyak) plugin:
Tanpa berpikir terlalu banyak tentang hal itu, tapi saya kira Anda bisa menghubungkan pemberitahuan Anda ke dalam cek pada 'semua' filter dan periksa di dalam filter saat ini jika dipicu ketika Anda berada di
shutdown
hook ...?@scibu Ini ditargetkan pada topik "Anda". (Saya sudah berhenti berbicara tentang milik saya). :)
Jadi pada dasarnya, jika Anda memerlukan dependensi - dan Anda memiliki penulis yang bagus - maka ia bisa menawarkan hook sebagai pengganti / sebagai pengganti tag templat. Karena plugin hanya akan menghubungkan ke dalamnya jika hook akan ada, atau tidak melakukan apa-apa. Dan di sisi lain Anda tidak akan memiliki kesalahan, ketika plugin tidak ada.
Inilah bagian yang sulit (atau lebih dari T): Untuk menulis pemberitahuan admin untuk memberi tahu pengguna tentang ketergantungan "Anda perlu menginstal» DisneyWonderLinks «", Anda dapat memeriksa
array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
. Saya tidak yakin apakah ini akan berhasil, tetapi afaik array harus dapat diakses di kedua sisi (publik / admin).Itu tidak akan berhasil. Hanya karena panggilan balik terdaftar ke sebuah kail tidak berarti bahwa kail akan dipicu ketika diharapkan. Satu-satunya hal yang akan semacam pekerjaan adalah menggunakan hook 'shutdown', yang Anda sebutkan sebelumnya:
Tentu saja, ini akan dicetak di bagian paling bawah, setelah
</html>
tag, di front-end (karena di situlah tag template biasanya digunakan), yang tidak banyak digunakan.Anda bisa mencoba menyimpan pesan di wp_options dan kemudian menampilkannya di admin area, tetapi itu akan membuka kaleng baru cacing: invalidation, caching plugins etc.
sumber