Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Plugins
Code

Mendistribusikan Plugin Anda di GitHub dengan Pembaruan Otomatis

by
Difficulty:IntermediateLength:LongLanguages:

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

WordPress telah memudahkan plugin untuk digunakan untuk publik. Cukup letakkan plugin Anda di repositori plugin WordPress dan itu dapat dengan mudah ditemukan oleh orang-orang dari dalam dashboard mereka.

Mungkin salah satu fitur terbaik dari repositori adalah membuatnya mudah untuk memperbarui plugin dari dalam dashboard. Pemberitahuan pembaruan ditampilkan di dalam dasbor, dan melakukan pembaruan semudah mengklik tombol Update Now.

Tapi bagaimana kalau Anda ingin meng-host plugin sendiri? Fitur pembaruan yang mudah tidak akan tersedia jika Anda meng-host plugin Anda di luar repo plugin WordPress. Pengguna Anda juga tidak akan diberitahu tentang pembaruan yang tersedia.

Artikel ini akan mengajarkan Anda bahwa dengan sedikit pengkodean kreatif, Anda dapat meng-host plugin WordPress Anda sendiri di GitHub sambil tetap mempertahankan fitur pembaruan otomatis.

Mengapa Host Plugin Anda di GitHub?

Mungkin ada beberapa alasan mengapa Anda ingin menghosting plugin Anda di luar repositori plugin WordPress. Salah satu batasan utama yang diberikan repositori adalah Anda harus melisensikan plugin Anda sebagai GPLv2. Saya tidak akan membahas perincian lisensi, tetapi singkatnya itu berarti bahwa siapa pun dapat berbagi pekerjaan Anda. Jadi jika Anda ingin menjual plugin Anda, maka hosting itu di repositori pribadi GitHub sekarang menjadi opsi yang dapat Anda pertimbangkan.

Namun, karena cara WordPress dibangun, hosting plugin Anda di GitHub akan menonaktifkan pembaruan otomatis untuk plugin kami. Untuk memahami mengapa hal ini terjadi, kita harus memahami bagaimana WordPress menangani pembaruan plugin.

Anda dapat mempelajari lebih lanjut tentang repositori plugin WordPress dengan membaca Panduan Plugin Terperinci mereka.

Bagaimana WordPress Memperbarui Plugin

Pertama, mari kita selidiki bagaimana WordPress melakukan pembaruan plugin untuk mendapatkan pemahaman yang lebih baik tentang mengapa plugin yang di-host sendiri tidak dapat memiliki pembaruan otomatis

WordPress secara berkala memeriksa repositori WordPress untuk pembaruan plugin yang Anda instal. Ia menerima banyak informasi tentang setiap plugin seperti versi terbarunya dan URL paket plugin. Inilah yang biasanya kita lihat di halaman admin plugin ketika kami diberitahu tentang pembaruan:

Plugin Admin Update Now

Ketika kami mengklik tautan View version x.x details, WordPress melakukan pencarian lain di repo plugin. Kali ini ia mendapat informasi lebih rinci tentang plugin seperti deskripsi, changelog, versi WordPress yang diuji, dan banyak lagi. Informasi ini ditunjukkan kepada kami di lightbox:

Plugin Lightbox

Terakhir, ketika tautan Update Now diklik, paket plugin yang diperbarui diunduh dan diinstal.

Jadi mengapa pembaruan otomatis tidak berfungsi untuk plugin yang di-host-sendiri? Itu karena WordPress mencoba menemukannya di repositori plugin WordPress dan tidak dapat menemukannya di sana!

Rencana permainan

Rencana kami adalah untuk mengaktifkan pembaruan otomatis dengan plugin kami yang dihosting GitHub.

Berikut daftar apa yang perlu kita lakukan untuk membuatnya bekerja:

  • Kami membutuhkan cara untuk menyebarkan pembaruan plugin di GitHub.
  • Kami harus menunjukkan pemberitahuan pembaruan versi plugin,
  • Akan lebih baik untuk menampilkan detail plugin ketika tautan View version x.x details diklik.
  • Kami juga ingin berhasil menginstal pembaruan plugin ketika tautan update now diklik,

Bagaimana untuk mengeksekusi rencana

Kami akan menggunakan beberapa filter WordPress agar kami dapat mengimplementasikan rencana permainan kami. Ini adalah:

  • pre_set_site_transient_update_plugins. Filter ini dipanggil ketika WordPress mencoba memeriksa pembaruan plugin.
  • plugins_api. Yang ini digunakan ketika WordPress menunjukkan detail pembaruan dari plugin.
  • iupgrader_post_install. Terakhir, ini dipanggil setelah plugin berhasil diinstal.

Kami akan menghubungkan ke filter ini, kemudian mendorong data kami ke dalam hasil untuk membuat WordPress berpikir bahwa plugin kami ada di repositori plugin WordPress. Data yang akan kami masukkan akan berasal dari repo GitHub kami, dan harus meniru data yang diberikan oleh repositori plugin.

Menyiapkan Proyek GitHub

Sebelum kita melanjutkan dengan pengkodean, mari kita bicara tentang GitHub dan bagaimana kita akan menggunakannya untuk memberikan data yang kita butuhkan untuk memberi makan WordPress.

Anda akan memerlukan repositori GitHub pribadi atau publik. Repo Anda harus berisi semua file plugin Anda, dan bukan salinan terkompresi dari plugin Anda.

Kami akan menggunakan fitur keren dari GitHub yang disebut Rilis.

GitHub Releases

Hal yang baik tentang rilis adalah ia mendapatkan basis kode saat ini di repositori dan membuat file zip yang dapat diunduh untuk setiap rilis spesifik. Kami dapat memberi tahu WordPress untuk mengunduh file zip ini ketika memperbarui plugin kami.

Hal baik lainnya tentang Rilis adalah kita bisa memasukkan detail pembaruan plugin kita di catatan rilis. Kami kemudian dapat menguraikan ini dan menampilkannya di lightbox WordPress untuk rincian pembaruan plugin. Kami dapat melangkah lebih jauh dan bahkan mengizinkan markdown GitHub untuk changelog kami.

GitHub Releases

Saat tiba waktunya untuk menyebarkan pembaruan ke plugin kami, ikuti pemformatan pada gambar di atas saat Anda membuat rilis baru:

  • Tag Name: Versi plugin (hanya nomornya)
  • Release notes: Deskripsi pembaruan
Anda dapat membaca lebih lanjut tentang GitHub Rilis di artikel mereka. Rilis Perangkat Lunak Anda

Membuat Kelas Updater kami

Sekarang saatnya untuk kode plugin kami!

Pertama, kami membuat titik awal untuk kelas kami:

Ini adalah struktur kelas yang akan kita gunakan. Kami hanya mendefinisikan semua fungsi yang akan kami gunakan dan membuat hook filter kami. Kelas ini tidak melakukan apa-apa pada saat ini, kecuali untuk menetapkan nilai ke properti kelas.

Argumen Konstruktor

Agar kelas kita dapat dieksekusi, kita perlu beberapa argumen:

  • $pluginFile: Kami akan memanggil kelas ini dari skrip plugin utama kami, ini harus memiliki nilai __FILE__. Kami akan mendapatkan detail tentang plugin kami nanti.
  • $gitHubUsername: Nama pengguna GitHub Anda
  • $gitHubProjectName: Nama repositori GitHub Anda
  • $accessToken: Token akses yang memungkinkan kita melihat detail repo GitHub pribadi. Jika proyek Anda dihosting di repo GitHub publik, biarkan ini kosong.

Sekarang mari kita isi fungsi kelas kita dengan beberapa kode.

Anda dapat mempelajari lebih lanjut tentang membuat token akses dari bantuan GitHub. Anda juga dapat membaca tentang cara kerja API GitHub.

Fungsi initPluginData

Ini adalah fungsi paling sederhana di kelas kami. Kami akan membutuhkan slug plugin kami dan informasi lain di seluruh skrip, jadi kami melakukan panggilan yang diperlukan dalam fungsi untuk kenyamanan.

Fungsi getRepoReleaseInfo

Fungsi ini adalah tentang berkomunikasi dengan GitHub untuk mendapatkan informasi rilis kami. Kami akan menggunakan API GitHub untuk mendapatkan detail mengenai rilis terbaru kami. Kemudian simpan semua yang kita dapatkan di properti githubAPIResult kami untuk diproses di masa depan.

Filter pre_set_site_transient_update_plugins dipanggil dua kali oleh WordPress, sekali ketika memeriksa pembaruan plugin, lalu yang lain setelah mendapat hasil. Karena kita akan menggunakan fungsi ini di filter itu, kita akan menanyakan API GitHub dua kali. Kami hanya perlu mendapatkan informasi dari GitHub sekali:

Selanjutnya, kami akan menggunakan API GitHub untuk mendapatkan informasi tentang rilis kami:

Terakhir, kami hanya akan menyimpan data untuk rilis plugin terbaru:

Sekarang kita bisa mendapatkan data plugin dari GitHub. Kami akan menguraikan data ini dalam fungsi berikutnya.

Fungsi setTransitent

Fungsi ini dipanggil ketika WordPress memeriksa pembaruan plugin. Tugas kami di sini adalah menggunakan data rilis GitHub kami untuk memberikan informasi untuk pembaruan plugin kami.

Hal pertama yang kami lakukan adalah memeriksa apakah WordPress telah memeriksa pembaruan plugin sebelumnya. Jika sudah, maka kita tidak perlu menjalankan sisa fungsi lagi.

Selanjutnya, kita akan mendapatkan informasi plugin yang akan kita gunakan:

Setelah memanggil kedua fungsi ini, kita dapat memeriksa versi plugin lokal kita dari versi (nama tag) yang ditemukan di GitHub. Kita dapat menggunakan fungsi version_compare PHP yang nyaman untuk membandingkan dua nilai:

Terakhir, ada pembaruan plugin yang tersedia, kita perlu meminta admin untuk menampilkan pemberitahuan pembaruan. Kami melakukan ini dengan mengisi variabel $transient dengan informasi plugin kami yang diperbarui.

Setelah fungsi ini memproses informasi GitHub kami, admin kami akan dapat menampilkan pemberitahuan di halaman admin plugin:

Plugin Update Notification

Fungsi setPluginInfo

Tujuan fungsi ini adalah untuk mengumpulkan perincian tentang plugin yang diperbarui dari catatan rilis. Semua informasi ini akan ditampilkan di dalam lightbox ketika tautan View versi x.x details diklik.

Pertama, mari kita dapatkan informasi plugin kami:

Selanjutnya kita periksa apakah sudah waktunya menampilkan sesuatu atau tidak. Kami dapat memeriksa apakah kami mencoba memuat informasi untuk plugin kami saat ini dengan memeriksa slug:

Untuk menampilkan detail plugin kami, kami perlu menambahkan informasi plugin kami secara manual ke variabel $response, biasanya variabel ini akan diisi dengan hasil dari repositori plugin WordPress:

Sejauh ini kami telah menambahkan detail plugin kami, tetapi kami belum mem-parsing catatan rilis kami dari rilis GitHub kami. Mari kita periksa apa yang kita miliki di catatan rilis kami:

GitHub Releases

Dalam catatan rilis, kami telah menetapkan tiga detail tentang rilis kami: changelog kami, diikuti oleh versi WordPress minimum yang disyaratkan, kemudian versi WordPress terbaru yang diuji plugin. Kami akan menguraikan teks ini dan mengekstraksi nilai-nilai ini.

Karena kita hosting plugin kita di GitHub, alangkah baiknya jika kita dapat memiliki kemampuan untuk menggunakan markdown GitHub dalam catatan rilis kami. Saya akan menggunakan kelas PHP yang disebut ParseDown untuk mengonversi teks markdown ke HTML:

Kami juga akan membuat tab di lightbox untuk membuatnya sesuai dengan bagaimana plugin yang dihosting repositori WordPress menampilkan informasinya. Satu untuk deskripsi plugin dan lainnya untuk changelog kami:

Akhirnya kita akan mengekstraksi nilai-nilai untuk kebutuhan dan diuji:

Fungsi postInstall

Fungsi terakhir ini kita akan berurusan dengan melakukan proses tambahan yang kita butuhkan untuk menginstal plugin kita sepenuhnya setelah diunduh.

Saat membuat rilis untuk repo GitHub kami, secara otomatis membuat file zip untuk rilis spesifik itu. Nama file untuk file zip dihasilkan oleh GitHub dengan format reponame-tagname.zip. Ini juga berisi direktori tempat file plugin kami berada. Demikian pula, nama direktori untuk ini juga mengikuti format reponame-tagname.

Biasanya, ketika WordPress mengunduh dan membuka ritsleting arsip plugin, nama direktori plugin tidak berubah. Jika Anda direktori plugin adalah my-awesome-plugin, setelah menghapus file plugin lama dan membuka yang diperbarui, direktori Anda masih akan bernama my-awesome-plugin. Tetapi karena GitHub mengubah nama direktori plugin kami setiap kali kami meluncurkan rilis, WordPress tidak akan dapat menemukan plugin kami. Itu masih dapat menginstalnya, tetapi itu tidak akan dapat mengaktifkannya kembali. Kami dapat memperbaiki masalah ini dengan mengganti nama direktori baru agar sesuai dengan yang lama.

Hal pertama yang pertama:

Selanjutnya kita harus memeriksa apakah plugin kita saat ini diaktifkan, sehingga kita dapat mengaktifkannya kembali setelahnya:

Sekarang kami mengganti nama direktori plugin kami yang diperbarui agar sesuai dengan yang lama. Kami menggunakan fungsi move di sini, tetapi karena kami menentukan direktori yang sama, itu akan seperti mengganti nama:

Langkah terakhir adalah mengaktifkan kembali plugin:

Memanggil Kelas Updater GitHub Kami

Sekarang setelah kelas selesai, yang harus dilakukan adalah memanggilnya di file plugin utama kami:

Mencoba

Hanya itu! Cukup sertakan kelas ini dan panggil di plugin Anda, dan itu harus mulai memeriksa pembaruan secara otomatis.

Untuk menguji apakah itu berfungsi, buat rilis baru untuk repo GitHub Anda dan ikuti panduan yang dinyatakan sebelumnya:

GitHub Releases

Setelah membuat rilis, Anda dapat memaksa WordPress untuk memeriksa pembaruan dengan mengeklik tombol refresh yang ditemukan di bilah admin.

Kesimpulan

Saya harap Anda mempelajari satu atau dua hal tentang cara kerja WordPress dan bagaimana seluruh proses pembaruan plugin dilakukan. Anda dapat mengunduh skrip lengkap dari tautan unduhan di bagian atas artikel ini.

Saya harap Anda menikmati artikel ini. Saya sangat menghargai umpan balik apapun, komentar dan saran. Berbagi pemikiran Anda di bawah ini!

Advertisement
Advertisement
Advertisement
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.