Advertisement
  1. Code
  2. Plugins

Dua Cara untuk Mengembangkan Plugin WordPress: Pemrograman Berorientasi Objek

Scroll to top
Read Time: 13 mins

Indonesian (Bahasa Indonesia) translation by Diangr (you can also view the original English article)

Ketika datang untuk menulis plugin WordPress, biasanya ada dua cara untuk melakukannya: Pemrograman Berorientasi Objek dan Pemrograman Fungsional (dengan Widget menjadi pengecualian - kami akan membahasnya nanti di artikel).

Meskipun anda umumnya memiliki orang yang menganut satu gaya pemrograman di atas yang lain, masing-masing menyajikan serangkaian kelebihan dan kekurangannya sendiri.

Dalam seri dua bagian ini, Stephen Harris dan saya akan memecah dua cara yang dapat anda lakukan untuk menulis plugin WordPress. Secara khusus, saya akan berbicara tentang pemrograman berorientasi objek, dan dia akan mencakup pemrograman fungsional.

Karena tingkat pengalaman pembaca bervariasi, kita akan berbicara tentang pemrograman pada tingkat tinggi, jadi jika anda seorang pemula, maka anda seharusnya tidak memiliki masalah mengikuti. Namun, jika anda adalah pengembang yang lebih berpengalaman, maka anda dapat menemukan informasi yang lebih berguna nanti di artikel tersebut.

Dengan itu, mari kita mulai melihat pendekatan berorientasi objek untuk mengembangkan plugin WordPress.


Mengembangkan Widget WordPress

Seperti yang disebutkan dalam pendahuluan, plugin dapat dikembangkan untuk WordPress dengan dua cara:

  1. Pemrograman berorientasi objek
  2. Pemrograman fungsional

Artikel kedua dalam seri ini akan mencakup Pemrograman Fungsional, tetapi mari kita berikan definisi kerja pemrograman berorientasi objek sehingga kita semua berada pada level yang sama di seluruh artikel ini.

Wikipedia menyatakan:

Pemrograman berorientasi objek (OOP) adalah paradigma pemrograman menggunakan "objek" - biasanya contoh kelas - yang terdiri dari bidang data dan metode bersama dengan interaksinya - untuk merancang aplikasi dan program komputer.

Mereka yang lebih berpengalaman dengan pemrograman komputer, terutama yang menggunakan teknik pemrograman berorientasi objek, kemungkinan akan menyukai definisi itu.

Tapi mari kita sederhanakan untuk tujuan artikel ini:

Pemrograman berorientasi objek adalah teknik pemrograman yang menggunakan kumpulan metode terkait untuk mendefinisikan program komputer atau bagian dari program komputer.

Cukup sederhana, bukan? Dalam kasus kami, plugin kami jelas merupakan bagian dari program komputer karena mereka tertarik ke WordPress.

Meskipun kita akan melihat kode di seluruh sisa artikel ini, perhatikan bahwa program berorientasi objek diidentifikasi oleh pengelompokan metode terkait mereka dan yang dilakukan dalam konteks apa yang disebut kelas - yang akan kita bahas sebentar lagi.

Sebuah Kata Tentang Widget

Meskipun benar bahwa plugin WordPress dapat dikembangkan menggunakan OOP atau pemrograman fungsional, ada pengecualian ketika mengembangkan Widget.

Menurut artikel Codex tentang pengembangan widget, struktur berikut ini digunakan untuk menulis widget:

Ini berarti bahwa semua Widget harus ditulis menggunakan OOP. Jika anda belum melihat kode seperti di atas, kami akan membahasnya di bagian selanjutnya dan harus menyediakan semua yang perlu anda ketahui untuk memahami apa yang sedang terjadi.


Pengantar Ringkas untuk OOP

Sebelum kita mulai melihat membangun plugin berbasis OOP untuk WordPress, mari kita lihat lebih dekat dasar-dasar OOP untuk memastikan bahwa kita memahami terminologi, dan bagaimana paradigma itu bekerja.

Kelas

Seperti yang kami definisikan sebelumnya, OOP menggunakan "kumpulan metode terkait." Tapi kita tidak bisa berhenti di situ. Setelah semua, pemrograman fungsional melakukan hal yang sama.

Di OOP, "metode terkait" ini semuanya terkait dalam konteks apa yang disebut class. Dalam contoh Widget di atas, anda akan melihat kata kunci class sebagai kata pertama dalam kode.

Ini dimulai pada garis yang diakhiri dengan braket pembukaan (seperti fungsi), dan kemudian merangkum - atau membungkus - semua fungsi terkait sebelum mengakhiri dengan braket penutup (untuk saat ini, abaikan kata kunci extends dalam contoh Widget - kita Akan menyentuh itu sebentar lagi.

Pengelompokan Fungsi Logis

Jika Anda baru mulai dengan kelas menulis dan anda bertanya-tanya apakah suatu fungsi termasuk dalam kelas tertentu, tanyakan pada diri anda apakah fungsi tersebut terdengar seperti sesuatu yang kelas khusus akan lakukan.

Sebagai contoh, dalam contoh Widget di atas, metode update jelas sesuatu yang widget akan lakukan. Tapi katakanlah anda menulis kelas yang akan bertanggung jawab untuk membaca posting blog ke database WordPress. Akan masuk akal untuk kelas tertentu untuk memiliki fungsi yang disebut read atau read_by_id, tetapi haruskah itu memiliki fungsi yang disebut write? Bagaimana dengan delete?

Tergantung bagaimana anda merancang kelas anda, mungkin. Tetapi jika tujuan utama dari class adalah membaca data, maka mungkin tidak.

Dan itulah OOP: secara logis mengelompokkan fungsi-fungsi anda bersama di kelas, tetapi mengatakan pengelompokan logis bergantung pada tanggung jawab yang anda berikan kepada kelas anda.

Topik Tingkat Lanjut di OOP

OOP adalah paradigma kuat yang digunakan di seluruh aplikasi WordPress. OOP memungkinkan untuk operasi lanjutan seperti pewarisan (yang diwakili oleh kata kunci yang extends dalam kelas Widget), pola desain yang pada dasarnya merupakan solusi yang ada untuk masalah umum.

Artikel ini tidak mencoba untuk menyelam jauh ke dalam pemrograman berorientasi objek. Ini hanya mencoba untuk memberikan landasan dari yang kita dapat menjelajahi dua cara menulis plugin WordPress, tapi saya menyebutkan mereka di sini jika anda tertarik untuk menyelam lebih jauh ke dalam pemrograman berorientasi objek.


Mengembangkan Plugin Berbasis-Kelas

Sekarang kita telah mendefinisikan pemrograman berorientasi obyek dan cukup dieksplorasi untuk meletakkan dasar, sudah waktunya untuk benar-benar mulai berbicara tentang komponen pengembangan berbasis OOP dalam konteks plugin WordPress.

Di seluruh artikel ini, kita akan membahas dasar-dasar apa yang diperlukan untuk menulis plugin berbasis OOP, dan keuntungan yang dihasilkannya.

Mendefinisikan Kelas

Sebelum anda melakukan apa pun dalam pengembangan berorientasi objek, anda harus menentukan kelas anda. Dengan asumsi bahwa anda sudah memiliki gagasan tentang apa yang akan dilakukan kelas anda, ini biasanya masalah dengan apa yang anda ingin beri nama kelas anda.

Untuk sebagian besar, saya berpikir bahwa melihat kode contoh selalu menguntungkan ketika benar-benar mengajarkan kode, jadi kita akan melihat pada WordPress Plugin Boilerplate.

Perhatikan bahwa Plugin Boilerplate adalah proyek yang awalnya saya buat untuk membantu meluncurkan plugin berbasis OOP. Ini telah disumbangkan oleh sejumlah orang yang berbeda. Saya menggunakannya dalam artikel ini karena menunjukkan topik yang sedang dibahas.

Yang mengatakan, perhatikan definisi kelas untuk Plugin Boilerplate terlihat seperti ini:

Karena Plugin Boilerplate adalah tempat awal untuk pengembangan, kami jelas akan mengganti nama kelas. Untuk artikel ini, sebut saja DemoPlugin.

Pada titik ini, kami siap memulai mendefinisikan fungsi yang hidup di dalam kelas.

Konstruktor

Di OOP, fungsi pertama yang mungkin anda lihat di kelas adalah fungsi yang disebut "konstruktor" dan PHP tidak berbeda.

Definisi konstruktor yang sederhana dan berfungsi adalah ini:

Konstruktor adalah tempat anda menginisialisasi data yang akan digunakan di seluruh kelas.

Cara kerjanya beragam dari proyek ke proyek, tetapi ada dua hal utama yang dapat kita lakukan dalam konteks plugin WordPress:

  1. Siapkan textdomain untuk tujuan pelokalan
  2. Tentukan tindakan dan filter kami (khususnya, tindakan kami dan filter kami).

Di DemoPlugin kami, kami akan melakukan hal itu. Kami akan mengatur sebuah textdomain dari demo-plugin dan kami akan mendaftarkan tindakan untuk mendaftarkan dan memasukkan contoh stylesheet dan contoh file JavaScript.

Untuk menjadi lengkap dalam contoh kami, kami juga akan mendaftarkan hook untuk menambahkan beberapa teks ke akhir konten yang ditampilkan dalam sebuah posting.

Pertama, mari kita definisikan konstruktor:

Perhatikan bahwa dalam PHP, konstruktor didefinisikan oleh fungsi publik bernama construct yang diawali oleh dua garis bawah.

Selanjutnya, mari kita tentukan textdomain kami:

Pada baris kode di atas, perhatikan bahwa kami telah menetapkan kunci untuk textdomain kami untuk menjadi demo-plugin dan garis berharap untuk menemukan file pelokalan dalam subdirektori yang disebut lang di direktori plugin.

Karena lokalisasi berada di luar ruang lingkup artikel ini, saya tidak akan menyelam lebih jauh, tetapi anda dapat meninjau kode sumber untuk Plugin Boilerplate untuk melihat bagaimana pengaturan ini.

Selanjutnya, mari kita definisikan tindakan untuk mendaftarkan stylesheet dan JavaScript serta filter yang akan menambahkan beberapa teks ke bagian akhir konten kami:

Jika Anda tidak terbiasa dengan tindakan dan filter, pastikan untuk membaca salah satu artikel terbaru saya di sini di Wptuts + karena ini menjelaskan perbedaannya.

Sekarang, jika anda akrab dengan pengembangan tema WordPress atau pemrograman fungsional, maka anda mungkin terbiasa melihat sesuatu seperti berikut:

Daripada:

Perhatikan bahwa perbedaan dalam dua panggilan di atas ada di parameter kedua. Secara khusus, di plugin kami, kami melewati sebuah array sedangkan baris kode pertama hanya melewati sebuah string.

Karena kami mengembangkan plugin ini menggunakan OOP, WordPress harus tahu di mana harus memanggil metode register_plugin_styles. Karena ia hidup di dalam kelas kami, kami harus memberi tahu WordPress untuk memanggil metode pada instance kelas kami.

Masuk akal?

Pada dasarnya, kami memberi tahu WordPress: Saya punya metode yang disebut register_plugin_styles, tetapi anda perlu memanggilnya pada instance kelas ini (karena itu kata kunci this).

Jika anda baru menggunakan WordPress, tetapi berasal dari latar belakang pemrograman, maka anda dapat membayangkan bahwa anda memberi tahu WordPress untuk melakukan ini:

Bagaimanapun, intinya adalah bahwa jika anda mengembangkan plugin menggunakan OOP, maka anda harus mendaftarkan hook anda menggunakan array dengan dua indeks: yang pertama adalah $this dan yang kedua adalah nama fungsi.

Catatan Tentang Pass-by-Reference dan Pass-by-Value

Pengembang tingkat lanjut akan terbiasa dengan kemampuan PHP untuk melewati-referensi dan nilai-demi-lewat. Di WordPress Development, tidak jarang melihat hal-hal berikut:

Di mana this dilewatkan oleh referensi; Namun, pada PHP 5.4, kemampuan untuk melewatkan variabel berdasarkan referensi pada waktu panggilan telah dihapus. Itulah mengapa tutorial ini memilih untuk melewati nilai.

Fungsi

Dalam pemrograman, fungsi adalah unit kode yang pada dasarnya bertanggung jawab untuk "melakukan sesuatu." Dalam pemrograman berorientasi objek, ada baiknya untuk memikirkannya sedikit berbeda.

Dalam OOP, kelas yang biasanya diwakili oleh kata benda. Dalam kasus kami, kami memiliki DemoPlugin. Demikian pula, fungsi sering kata kerja. Yaitu, mereka adalah tindakan yang dapat dilakukan oleh kata benda kami. Pada titik ini, kami telah memilih untuk menentukan fungsi-fungsi berikut:

  • register_plugin_styles
  • register_plugin_scripts
  • append_post_notification

Perhatikan bagaimana setiap nama fungsi merepresentasikan suatu tindakan yang dapat diambil. Ini adalah aturan praktis yang baik untuk digunakan saat menulis fungsi.

Dalam pemrograman fungsional, hanya ada ide fungsi; Namun, di OOP, ada beberapa jenis fungsi yang berbeda, dua di antaranya adalah fungsi "publik" dan fungsi "pribadi".

Fungsi Publik

Fungsi Publik adalah fungsi yang dapat diakses di luar kelas. Ini berarti anda dapat memanggil metode ini setelah anda memulai kelas.

Inilah tepatnya yang kami lakukan sebelumnya dalam kode berikut:

Pada dasarnya, fungsi-fungsi ini dapat diakses oleh publik (di mana publik dapat menjadi programmer atau objek lain).

Fungsi yang kami tulis untuk mendaftarkan stylesheet kami, JavaScript kami, dan yang kami tulis untuk menambahkan teks ke posting harus ditandai sebagai publik karena akan ada panggilan pihak ketiga pada mereka - WordPress.

Mari kita mendefinisikan dua fungsi untuk aksi wp_enqueue_scripts:

Sekali lagi, perhatikan bahwa kedua fungsi ini mengharapkan bahwa stylesheet dan JavaScript berada di subdirektori css dan js. Untuk melihat ini dalam aksi, ingatlah untuk memeriksa Boilerplate Plugin.

Terakhir, mari kita definisikan fungsi untuk filter_konten:

Perhatikan bahwa kami menggunakan fungsi __ untuk memastikan skrip kami dilokalkan dengan textdomain yang kami definisikan di konstruktor.

Fungsi Pribadi

Jika metode publik dapat diakses oleh siapa saja, maka itu akan menyiratkan bahwa fungsi pribadi dapat diakses oleh siapa pun, bukan? Untuk sebagian besar, itu benar: Satu-satunya orang - atau hal - yang dapat memanggil metode pribadi adalah kelas di mana mereka didefinisikan.

Itu berarti WordPress, objek pihak ketiga, atau pemrogram dapat secara terprogram memanggil fungsi pribadi. Fungsi pribadi hanya dapat dipanggil dari dalam kelas yang digunakan.

Secara umum, fungsi pribadi sangat berguna ketika menulis metode pembantu - yaitu, mereka berguna untuk memanipulasi data secara internal untuk membantu fungsi lain menjalankan tugasnya.

Untuk memberikan contoh yang berfungsi, mari kita mendefinisikan fungsi pribadi yang akan mengembalikan string lokal yang dapat digunakan oleh fungsi append_post_notification kami:

Selanjutnya, mari kita refactor append_post_notification function untuk memanggil helper baru ini:

Perhatikan bahwa kami telah menyederhanakan fungsi pertama dengan menambahkan fungsi kedua. Anda juga dapat menyatakan bahwa kami telah meningkatkan pembacaan fungsi awal dengan menambahkan panggilan ke fungsi dengan nama yang membantu menjelaskan apa yang terjadi.

Mungkin hal yang paling penting untuk dicatat adalah bahwa untuk memanggil fungsi pribadi, Anda harus awalan panggilan fungsi dengan kata kunci $this dan ->. Ini mengatakan PHP: "Panggil fungsi get_localized_notification yang hidup di kelas this."

Bagaimanapun, kami telah memberikan setiap metode tanggung jawab tunggal - praktik bagus lainnya dalam pemrograman berorientasi objek - dan kami telah menunjukkan penggunaan fungsi publik dan pribadi.

Tipe Fungsi Lainnya

Dalam pemrograman berorientasi objek, ada juga jenis fungsi lain yang berada di luar cakupan artikel ini.

Agar lengkap, saya ingin merangkumnya di sini:

  • Fungsi Statis adalah fungsi yang tidak memerlukan instance dari kelas yang akan dipanggil. Sebagai gantinya, anda dapat memanggil mereka langsung pada nama kelas. Sebagai contoh: DemoPlugin::use_this_static_method().
  • Fungsi yang Dilindungi seperti fungsi pribadi kecuali untuk subclass. Artinya, satu-satunya objek yang dapat mengakses fungsi yang dilindungi adalah subclass dari kelas yang diberikan. Jenis fungsi khusus ini berperan dalam konsep warisan yang disebutkan sebelumnya dalam artikel.

Keuntungan di WordPress

Pada titik ini, kami telah mencapai semua catatan tinggi untuk pengembangan WordPress berorientasi objek. Untuk meringkas kelebihannya:

1. Semua Fungsi Berada dalam Konteks

Saat menggunakan pemrograman berorientasi objek, anda tidak perlu menambahkan fungsi pada nama tema atau nama plugin yang sedang anda kerjakan, anda juga tidak perlu khawatir menamai sesuatu fungsi yang dapat mengganggu fungsi WordPress, fungsi tema lain, atau fungsi plugin lain.

Sebaliknya, semua fungsi hidup dalam konteks kelas lain. Satu-satunya hal yang harus dipastikan adalah bahwa kelas anda tidak diberi nama sesuatu yang mengganggu kelas lain yang ada.

2. memanggil mereka di luar API

Dengan menggunakan pemrograman berorientasi objek, anda dapat secara terprogram memanggil plugin anda dari luar API WordPress standar.

Katakanlah anda sedang mengembangkan sebuah tema dan anda ingin sesuatu ditampilkan di sidebar yang disediakan plugin anda. Di template sidebar, anda benar-benar dapat instantiate plugin anda dan kemudian memanggil metode di atasnya untuk menulis informasi ke sidebar.

Ini sangat berguna setiap kali anda bekerja pada template dan ingin memberikan beberapa data default jika pengguna tidak memasukkan sesuatu secara manual.


Kesimpulan

Seperti yang kami katakan di awal artikel: ini hanyalah salah satu cara di mana anda dapat mengembangkan plugin WordPress anda. Artikel Stephen akan membahas cara melakukannya menggunakan pemrograman fungsional.

Setelah membaca artikel ini, anda harus memiliki pemahaman yang lebih baik tentang pemrograman berorientasi objek, keuntungannya, dan anda harus dapat mengikuti kode yang didokumentasikan dalam API Widget, di Boilerplate Widget terkait, dan bahkan di seluruh tempat di basis kode WordPress .


Sumber daya

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.