Tidakkah menurutmu beberapa plugin WordPress beruntung? WooCommerce, Download Digit Mudah, Gravity Bentuk : setiap plugin ini didukung oleh seluruh perusahaan, dengan lusinan ekstensi pihak ketiga dan lebih banyak lagi fitur yang ditambahkan oleh mereka yang menambah potensi plugin. Selama waktu ini, sebagian besar plugin lain gagal untuk berkembang.

Bagaimana satu plugin menjadi dasar ekosistem teknologi yang berkembang? Ada banyak jawaban: jadilah yang pertama memasarkan, ciptakan produk hebat, miliki ketajaman pemasaran, dan segala sesuatu di antaranya. Tapi hari ini kita akan fokus pada bagian penting dari jawaban teknis yaitu: ekstensibilitas, melalui sistem hook WordPress.

Hari ini kita akan menggunakan contoh dari WordPress Plugin untuk mencakup dua fungsi utama yang memberikan status ekstensibilitas ke plugin yaitu: apply_filters() dan do_action().

Ekstensi: ekstensi untuk plugin

Oleh karena itu jelas bahwa ketika kita berbicara tentang "ekstensi", yang kita maksud adalah plugin yang dibuat untuk orang lain. Mari kita ambil contoh: " Stripe untuk WooCommerce '.

Ekstensi ini tidak melakukan apa pun jika Anda belum melakukannya WooCommerce. Jika Anda menginstal WooCommerce, lalu beli dan instal “ Garis Untuk WooCommerce Sebagai plugin terpisah, dan itu akan memperluas fungsionalitas WooCommerce sehingga Anda dapat mulai menerima pembayaran melalui gateway pembayaran Stripe.

Jadi Anda memiliki plugin yang meningkatkan plugin lain dengan cara tertentu. Ini perpanjangan. Ini adalah kata keterangan dari ekosistem WordPress.

Bagaimana fungsi: apply_filters () dan do_action () bekerja?

Pertanyaan selanjutnya: Bagaimana WooCommerce melihat fungsionalitasnya yang diperluas? Lagi pula, mudah untuk membayangkan menulis plugin eCommerce yang " hanya bekerja dengan beberapa gateway pembayaran ". Kemudian, jika Anda benar-benar ingin Stripe, Anda harus benar-benar mengubah WooCommerce, dan mungkin akhirnya membuat alat Anda sendiri yang disebut StripeCommerce, yang bisa menjadi pesaing WooCommerce atau hanya tinggal di situs salah satu pelanggan Anda yang mampu membayar bantuan pribadi.

Sangat berantakan untuk direnungkan, tetapi untungnya WooCommerce melakukan sesuatu yang jauh lebih baik. Itu menggunakan dua fungsi: apply_filters () dan do_action (). Dua fungsi ini memungkinkan Anda untuk membuat tanda kurung di WordPress, dan ini adalah bagian mendasar dari sistem WordPress Hooks secara umum.

apply_filters () dan do_action () Perbedaan yang agak sederhana:

  • apply_filters () memungkinkan Anda untuk menghubungkan filter ke fungsi.
  • do_action () memungkinkan Anda untuk menghubungkan tindakan ke fungsi.

Mari kita lihat sebuah contoh untuk melihat bagaimana mereka bekerja.

Contoh menggunakan kait WooPress.

Untuk contoh kami, kami akan menggunakan plugin "Kutipan Hari Ini", ditambah ekstensi yang mengubah plugin ini dengan cara tertentu. Untuk mengikuti dan melihat kode lengkapnya, unduh plugin sebagai file ZIP https://wpshout.com/media/2016/10/plugins.zip.

Plugin asli

Plugin ini menggunakan API yang diekspos oleh pustaka kutipan eksternal, dan menyimpan kutipan yang dihasilkan sebagai data transien WordPress yang diperbarui setiap 24 jam. Kembalilah ke artikel ini kapan saja dan Anda akan melihat kutipan acak dari hari ini tentang topik "hidup", yang seharusnya cukup luas.

ekstensi plugin

Seperti yang kita ketahui, masalah dengan kebanyakan kutipan adalah bahwa kutipan tersebut tidak diucapkan oleh "Carl Sagan". Ekstensi kami memperbaiki masalah ini, menggunakan sejumlah alat:

  • Tajuk besar yang menunjukkan tanggal hari ini dan kutipan dari Carl Sagan,
  • Beberapa penggantian kata tertentu untuk mengubah kutipan menjadi apa yang mungkin dikatakan Carl Sagan
  • Para penulis kutipan asli diubah dan kutipan sekarang dengan tepat dikaitkan dengan Carl Sagan.

Inilah plugin dan ekstensinya, beraksi:

Kutipan-in-action

Le kode

Agar ini terjadi, dua langkah diperlukan:

Plugin asli mendefinisikan hooks - hook aksi dan hook filter - memungkinkan kode eksternal untuk memodifikasi atau menambahkan kodenya sendiri pada poin-poin penting. Plugin ini menggunakan apply_filters () dan do_action () untuk melakukannya.

Ekstensi ini mendefinisikan fungsi hook pada aksi dan filter - yang memodifikasi plugin asli dengan cara yang diperlukan.

Kode kunci dalam plugin asli

Bagian terpenting dari kode bagi kami adalah apa yang kami lakukan setelah kami mendapatkan data kami dari API. Data ini tersedia sebagai larik dengan dua elemen: teks: teks kutipan; dan penulis: orang yang mengucapkan kutipan. Oleh karena itu, kode kami akan terlihat seperti ini:

add_shortcode ('extensible_plugin_demo', 'bpc_output_extensible_plugin'); function bpc_output_extensible_plugin () {ob_start (); // Kaitkan sebelum ditampilkan! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); if (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ['teks']; $ qod_author = $ qod_data ['penulis']; // Saring konten! $ qod_text = apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; echo ' '; echo $ qod_author; echo ' '; } // Action hook setelah sisa keluaran! do_action ('bpc_after_get_qod_text'); kembali ob_get_clean (); }

Kode kunci dalam ekstensi

Plugin tidak terdiri dari apa pun selain tindakan dan filter untuk memodifikasi plugin asli. Ini kode untuk ekstensinya:

add_filter( 'bpc_qod_text', 'bpc_filter_qod_text' );
// Filter: remplacer des mots spécifique
function bpc_filter_qod_text( $text ) {
    $text = str_replace( 
        array( ' I ', ' me ', ' the ', ' is ', ' am ', ' are ' ),
        array( ' I, a descendent of savannah-dwelling hominids that somehow evolved an astounding capacity for self-reflection, ', ' the cooled-off stellar matter I call "me" ', ' the trillions of atoms that make up the ', ' seems, without the mind-boggling perspective of quantum physics, to be ', ' cannot, due to the Heisenberg Uncertainty Principle, be determined not to be ', ' appear to our best scientific instruments to be ' ),
        $text
    );
    return $text;
}

// Filter: barré le texte qui précède le nom de l'auteur et ajouter Carl Sagan à la suite
add_filter( 'bpc_qod_author', 'wpshout_filter_qod_author' );
function wpshout_filter_qod_author( $text ) {
    $text = '<strike>' . $text . '</strike> Carl Sagan';
    return $text;
}

// Action: Ajouter un titre
add_action( 'bpc_before_get_qod_text', 'bpc_set_up_quote' );
function wpshout_set_up_quote() {
    echo '<h4>Carl Sagan Quote of the Day for ' . date( 'F j, Y') . ':</h4>';
}

// Action: Ajouter une image
add_action( 'bpc_after_get_qod_text', 'bpc_add_carl_boom' );
function bpc_add_carl_boom() {

    echo '<div><img class="aligncenter" src="' . plugin_dir_url( __FILE__ ) . 'carl_sagan_mind_blown.gif"></div>';
}

Seperti yang Anda lihat, ini adalah penggunaan standar " ADD_ACTIONsebagai () "Dan" add_filter () "Dan kedua fungsi tersebut dikaitkan dengan tanda kurung siku yang kami sebut" bpc_qod_text ".

Hasil akhirnya adalah bahwa plugin kami sekarang dapat diperpanjang: pengembang kedua dapat menonton memodifikasi plugin dan berkata "Saya ingin Carl Sagan mengatakannya », Dan lakukan dengan menggunakan plugin asli sebagai basis, seperti tema induk dan anak di WordPress.

Ini adalah trik yang membuat plugin seperti WooCommerce, sangat populer, memungkinkan Anda untuk menambahkan fitur baru.

Itu saja untuk tutorial ini. Saya harap Anda memahami lebih baik berbagai kasus penggunaan filter dan tindakan WordPress.