Cara Membuat Plugin WordPress Dapat Diperluas
Diterbitkan: 2022-03-10Pernahkah Anda menggunakan plugin dan berharap itu melakukan sesuatu yang sedikit berbeda? Mungkin Anda memerlukan sesuatu yang unik yang berada di luar cakupan halaman pengaturan plugin.
Saya pribadi pernah mengalami ini, dan saya yakin Anda juga pernah mengalaminya. Jika Anda seorang pengembang plugin WordPress, kemungkinan besar beberapa pengguna Anda juga mengalami hal ini saat menggunakan plugin Anda.
Berikut skenario tipikal: Anda akhirnya menemukan plugin yang melakukan semua yang Anda butuhkan — kecuali untuk satu hal kecil yang penting. Tidak ada pengaturan atau opsi untuk mengaktifkan hal kecil itu, jadi Anda menelusuri dokumentasi dan menemukan bahwa Anda tidak dapat berbuat apa-apa. Anda meminta fitur di forum dukungan plugin WordPress — tetapi tidak ada dadu. Pada akhirnya, Anda menghapusnya dan melanjutkan pencarian Anda.
Bayangkan jika Anda adalah pengembang plugin ini. Apa yang akan Anda lakukan jika pengguna meminta beberapa fungsi tertentu?
Hal yang ideal adalah menerapkannya. Tetapi jika fitur itu untuk kasus penggunaan yang sangat khusus, maka menambahkannya akan menjadi tidak praktis. Tidaklah baik untuk memiliki pengaturan plugin yang hanya digunakan oleh 0,1% pengguna Anda.
Anda hanya ingin menerapkan fitur yang memengaruhi sebagian besar pengguna Anda. Pada kenyataannya, 80% pengguna menggunakan 20% fitur (aturan 80/20). Jadi, pastikan bahwa setiap fitur baru sangat diminta, dan 80% pengguna Anda akan mendapat manfaat darinya, sebelum menerapkannya. Jika Anda membuat pengaturan untuk setiap fitur yang diminta, maka plugin Anda akan menjadi rumit dan membengkak — dan tidak ada yang menginginkannya.
Taruhan terbaik Anda adalah membuat plugin dapat diperluas, berdasarkan kode, sehingga orang lain dapat meningkatkan atau memodifikasinya untuk kebutuhan mereka sendiri.
Dalam artikel ini, Anda akan belajar tentang mengapa membuat plugin Anda dapat diperluas adalah ide yang bagus. Saya juga akan membagikan beberapa tip tentang bagaimana saya belajar melakukan ini.
Apa yang Membuat Plugin Dapat Diperluas?
Singkatnya, plugin yang dapat diperluas berarti bahwa plugin tersebut mematuhi bagian "O" dari prinsip SOLID dari pemrograman berorientasi objek — yaitu, prinsip buka/tutup.
Jika Anda tidak terbiasa dengan prinsip buka/tutup, itu pada dasarnya berarti bahwa orang lain tidak perlu mengedit kode Anda untuk mengubah sesuatu .
Menerapkan prinsip ini ke plugin WordPress, itu berarti bahwa sebuah plugin dapat diperluas jika memiliki ketentuan di dalamnya yang memungkinkan orang lain untuk mengubah perilakunya. Ini seperti bagaimana WordPress memungkinkan orang untuk "menghubungkan" ke berbagai area WordPress, tetapi pada tingkat plugin.
Contoh Umum Plugin
Mari kita lihat bagaimana kita dapat membuat plugin yang dapat diperluas, dimulai dengan contoh plugin yang tidak.
Misalkan kita memiliki plugin yang menghasilkan widget sidebar yang menampilkan judul dari tiga posting terbaru. Inti dari plugin adalah fungsi yang hanya membungkus judul ketiga posting tersebut dalam tag daftar:
function get_some_post_titles() { $args = array( 'posts_per_page' => 3, ); $posts = get_posts( $args ); $output = '
- ';
foreach ( $posting sebagai $post ) {
$keluaran .= '
- ' . $post->post_title . ' '; } $keluaran .= '
Meskipun kode ini berfungsi dan menyelesaikan pekerjaan, itu tidak cukup dapat diperluas.
Mengapa? Karena fungsi diatur dengan caranya sendiri, tidak ada cara untuk mengubah perilakunya tanpa memodifikasi kode secara langsung.
Bagaimana jika pengguna ingin menampilkan lebih dari tiga postingan, atau mungkin menyertakan tautan dengan judul postingan? Tidak ada cara untuk melakukannya dengan kode di atas. Pengguna terjebak dengan cara kerja plugin dan tidak dapat mengubahnya.
Termasuk Seratus Pengaturan Bukan Jawabannya
Ada beberapa cara untuk menyempurnakan plugin di atas agar pengguna dapat menyesuaikannya.
Salah satu caranya adalah dengan menambahkan banyak opsi dalam pengaturan, tetapi bahkan itu mungkin tidak memenuhi semua kemungkinan yang diinginkan pengguna dari plugin.
Bagaimana jika pengguna ingin melakukan salah satu dari yang berikut (skenario yang akan kita bahas nanti):
- menampilkan produk atau postingan WooCommerce dari kategori tertentu;
- menampilkan item dalam carousel yang disediakan oleh plugin lain, bukan sebagai daftar sederhana;
- lakukan kueri database kustom, lalu gunakan postingan kueri tersebut dalam daftar.
Jika kami menambahkan seratus pengaturan ke widget kami, maka kami akan dapat mencakup kasus penggunaan di atas. Tetapi bagaimana jika salah satu skenario ini berubah, dan sekarang pengguna hanya ingin menampilkan produk WooCommerce yang saat ini tersedia? Widget akan membutuhkan lebih banyak pengaturan untuk mengakomodasi ini. Segera, kami akan memiliki trilyun pengaturan.
Selain itu, plugin dengan daftar pengaturan yang sangat banyak tidak sepenuhnya ramah pengguna. Menjauhlah dari rute ini jika memungkinkan.
Jadi, bagaimana cara kita menyelesaikan masalah ini? Kami akan membuat plugin dapat diperluas.
Menambahkan Kait Kami Sendiri Agar Dapat Diperluas
Dengan mempelajari kode plugin di atas, kita melihat beberapa operasi yang dilakukan oleh fungsi utama:
- Itu mendapat posting menggunakan
get_posts
. - Ini menghasilkan daftar judul posting.
- Ini mengembalikan daftar yang dihasilkan.
Jika orang lain memodifikasi perilaku plugin ini, pekerjaan mereka kemungkinan besar akan melibatkan tiga operasi ini. Untuk membuat plugin kami dapat diperluas, kami harus menambahkan pengait di sekitarnya untuk membukanya bagi pengembang lain.
Secara umum, ini adalah area yang bagus untuk menambahkan pengait ke plugin:
- di sekitar dan di dalam proses utama,
- saat membuat HTML keluaran,
- untuk mengubah kueri pos atau basis data,
- sebelum mengembalikan nilai dari suatu fungsi.
Contoh Khas Plugin yang Dapat Diperluas
Mengambil aturan praktis ini, kami dapat menambahkan filter berikut untuk membuat plugin kami dapat diperluas:
- tambahkan
myplugin_get_posts_args
untuk memodifikasi argumenget_posts
, - tambahkan
myplugin_get_posts
untuk mengganti hasilget_posts
, - tambahkan
myplugin_list_item
untuk menyesuaikan pembuatan entri daftar, - tambahkan
myplugin_get_some_post_titles
untuk mengganti daftar yang dihasilkan kembali.
Inilah kodenya lagi dengan semua kait ditambahkan:
function get_some_post_titles() { $args = array( 'posts_per_page' => 3, ); // Let other people modify the arguments. $posts = get_posts( apply_filters( 'myplugin_get_posts_args', $args ) ); // Let other people modify the post array, which will be used for display. $posts = apply_filters( 'myplugin_get_posts', $posts, $args ); $output = '
- ';
foreach ( $posting sebagai $post ) {
// Biarkan orang lain mengubah entri daftar.
$keluaran .= '
- ' . apply_filters( 'myplugin_list_item', $post->post_title, $post ) . ' '; } $keluaran .= '
Anda juga bisa mendapatkan kode di atas di arsip GitHub.
Saya menambahkan banyak pengait di sini, yang mungkin tampak tidak praktis karena kode sampelnya cukup sederhana dan kecil, tetapi ini menggambarkan maksud saya: Dengan menambahkan hanya empat pengait, pengembang lain sekarang dapat menyesuaikan perilaku plugin dalam berbagai cara.
Penspasian Nama Dan Konteks Untuk Kait
Sebelum melanjutkan, perhatikan dua hal penting tentang hook yang telah kami terapkan:
- Kami memberi jarak pada kait dengan
myplugin_
.
Ini memastikan bahwa nama pengait tidak bertentangan dengan pengait beberapa plugin lain. Ini hanya praktik yang baik, karena jika kait lain dengan nama yang sama dipanggil, itu dapat menyebabkan efek yang tidak diinginkan. - Kami juga meneruskan referensi ke
$args
di semua kait untuk konteks.
Saya melakukan ini agar jika orang lain menggunakan filter ini untuk mengubah sesuatu dalam aliran kode, mereka dapat menggunakan parameter$args
itu sebagai referensi untuk mendapatkan ide mengapa hook dipanggil, sehingga mereka dapat melakukan penyesuaian yang sesuai.
Efek Kait Kami
Ingat skenario unik yang saya bicarakan sebelumnya? Mari kita tinjau kembali dan lihat bagaimana kait kami memungkinkannya:
- Jika pengguna ingin menampilkan produk atau postingan WooCommerce dari kategori tertentu , maka mereka dapat menggunakan filter
myplugin_get_posts_args
untuk menambahkan argumen mereka sendiri saat plugin meminta postingan, atau mereka dapat menggunakanmyplugin_get_posts
untuk sepenuhnya menimpa postingan dengan daftar mereka sendiri. - Jika pengguna ingin menampilkan item dalam carousel yang disediakan oleh plugin lain , alih-alih sebagai daftar sederhana, maka mereka dapat mengganti seluruh output fungsi dengan
myplugin_get_some_post_titles
, dan sebagai gantinya mengeluarkan carousel dari sana. - Jika pengguna ingin melakukan kueri basis data khusus dan kemudian menggunakan kiriman kueri itu dalam daftar, maka, mirip dengan skenario pertama, mereka dapat menggunakan
myplugin_get_posts
untuk menggunakan kueri basis data mereka sendiri dan mengubah larik kiriman.
Jauh lebih baik!
Contoh Singkat Cara Menggunakan Filter Kami
Pengembang dapat menggunakan add_filter
untuk menghubungkan ke filter kami di atas (atau menggunakan add_action
untuk tindakan).
Mengambil skenario pertama kami di atas, pengembang cukup melakukan hal berikut untuk menampilkan produk WooCommerce menggunakan filter myplugin_get_posts_args
yang kami buat:
add_filter( 'myplugin_get_posts_args', 'show_only_woocommerce_products' ); function show_only_woocommerce_products( $args ) { $args['post_type'] = 'product'; return $args; }
Kami Juga Dapat Menggunakan Kait Aksi
Selain menggunakan apply_filters
, kita juga dapat menggunakan do_action
untuk membuat kode kita dapat diperluas. Perbedaan antara keduanya adalah bahwa yang pertama memungkinkan orang lain untuk mengubah variabel, sedangkan yang kedua memungkinkan orang lain untuk menjalankan fungsionalitas tambahan di berbagai bagian kode kita.
Saat menggunakan tindakan, kami pada dasarnya mengekspos aliran plugin ke pengembang lain dan membiarkan mereka melakukan hal-hal lain secara bersamaan.
Ini mungkin tidak berguna dalam contoh kita (karena kita hanya menampilkan kode pendek), tetapi akan membantu pada orang lain. Misalnya, dengan plugin cadangan yang dapat diperluas, kita dapat membuat plugin yang juga mengunggah file cadangan ke layanan pihak ketiga seperti Dropbox.
"Besar! Tetapi Mengapa Saya Harus Peduli Tentang Membuat Plugin Saya Dapat Diperluas?”
Nah, jika Anda masih tidak setuju dengan ide tersebut, berikut adalah beberapa pemikiran tentang mengapa mengizinkan orang lain untuk mengubah perilaku plugin Anda adalah ide yang bagus.
Ini Membuka Plugin untuk Lebih Banyak Kemungkinan Kustomisasi
Setiap orang memiliki kebutuhan yang berbeda-beda. Dan ada kemungkinan besar plugin Anda tidak akan memuaskan semuanya, Anda juga tidak dapat mengantisipasinya. Membuka plugin Anda untuk memungkinkan modifikasi pada area utama dari perilaku plugin Anda dapat melakukan keajaiban.
Ini Memungkinkan Orang Memperkenalkan Modifikasi Tanpa Menyentuh Kode Plugin
Pengembang lain tidak akan dipaksa untuk mengubah file plugin Anda secara langsung. Ini adalah keuntungan besar karena secara langsung memodifikasi file plugin biasanya merupakan praktik yang buruk. Jika plugin diperbarui, maka semua modifikasi Anda akan dihapus.
Jika kita menambahkan kait kita sendiri untuk digunakan orang lain, maka modifikasi plugin dapat diletakkan di lokasi eksternal — katakanlah, di plugin lain. Dilakukan dengan cara ini, plugin asli tidak akan tersentuh sama sekali, dan dapat diperbarui secara bebas tanpa merusak apa pun, dan semua modifikasi di plugin lain akan tetap utuh.
Kesimpulan
Plugin yang dapat diperluas benar-benar luar biasa dan memberi kami ruang untuk banyak kemungkinan penyesuaian. Jika Anda membuat plugin Anda dapat diperluas, pengguna Anda dan pengembang lain akan menyukai Anda karenanya.
Lihatlah plugin seperti WooCommerce, Easy Digital Downloads, dan ACF. Plugin ini dapat diperluas, dan Anda dapat dengan mudah mengetahuinya karena banyak plugin lain di direktori plugin WordPress menambahkan fungsionalitas ke dalamnya. Mereka juga menyediakan beragam tindakan dan kait filter yang memodifikasi berbagai aspek plugin. Aturan praktis yang saya sebutkan di atas telah muncul dalam studi saya tentang mereka.
Berikut adalah beberapa takeaways untuk membuat plugin Anda dapat diperluas:
- Ikuti prinsip terbuka/tertutup. Orang lain tidak perlu mengedit kode Anda untuk mengubah sesuatu.
Untuk membuat plugin Anda dapat diperluas, tambahkan pengait di tempat-tempat ini:
- di sekitar dan di dalam proses utama,
- saat membangun HTML keluaran,
- untuk mengubah kueri pos atau basis data,
- sebelum mengembalikan nilai dari suatu fungsi.
- Beri nama pada nama pengait Anda dengan nama plugin Anda untuk mencegah konflik penamaan.
- Coba lewati variabel lain yang terkait dengan hook, sehingga orang lain mendapatkan beberapa konteks tentang apa yang terjadi di hook.
- Jangan lupa untuk mendokumentasikan pengait plugin Anda, sehingga orang lain dapat mempelajarinya.
Bacaan lebih lanjut
Berikut adalah beberapa sumber jika Anda ingin mempelajari lebih lanjut tentang memperluas plugin:
- Cara Membuat Plugin WordPress Anda Dapat Diperluas, GitHub
Semua contoh kode dalam artikel ini. - "Tips Berguna untuk Memulai Dengan WordPress Hooks," Thomas Maier, Smashing Magazine
- "Cara Membuat Plugin WordPress," Daniel Pataki, Smashing Magazine
- "Hooks," Buku Pegangan Plugin, WordPress.org