Saturday, October 5, 2013

Action dan Filter Hook pada Wordpress


Wordpress adalah CMS yang paling powerful saat ini menurut saya, tapi masih sedikit developer yang saya kenal yang fokus pada CMS ini. Sudah hampir setahun ini saya mempelajari wordpress. Banyak yang sudah saya pelajari dan saya rasa masih banyak lagi yang harus dipelajari dari CMS ini. Setiap kali membaca codex, selalu ada cara yang berbeda yang biasa dilakukan. Hal yang paling sulit menurut saya adalah ketika pertama kali mempelajari lingkungan kerja yang tidak "umum" pada CMS ini. Artikel yang Anda baca ini merupakan artikel kedua saya tentang Wordpress yang saya sharing pada BisaKomputer.com. Saya pernah menulis bagaimana translasi bahasa pada Wordpress yang dapat Anda lihat di sini. Beberapa artikel lain tentang Wordpress juga akan saya share untuk para pembaca BisaKomputer kedepannya.
Artikel ini merupakan dasar dan sekaligus bagian paling penting jika hendak bekerja dengan plugin dan theme Wordpress. Bagian penting yang saya maksud adalah action dan filter Aordpress. Action dan filter ini merupakan sebuah cara yang disediakan oleh Wordpress bertujuan untuk "hook into" ke sistem core Wordpress. Kedua hal ini jika dalam codex, masuk dalam bahasan Plugin API.
Wordpress mengenalkan action dan filter, bertujuan mengikutsertakan kode yang kita buat untuk dieksekusi pada titik-titik yang telah ditentukan. Kedua cara ini hampir sama untuk dipahami, oleh sebab itu banyak developer yang baru belajar Wordpress sukar untuk dapat membedakannya. Pengalaman saya, dengan memahami kedua hal ini, semua tutorial dan dokumentasi yang diberikan oleh para top-developer akan dengan mudah kita ikuti. Berikut ini saya berikan beberapa penjelasan tentang perbedaan kedua jenis hook ini dalam Wordpress.

Actions Hook

wordpress-hook
Bagian ini sebenarnya memang sangat mudah untuk dipahami, tapi juga sangat sulit untuk dijelaskan. Berikut adalah beberapa definisi bagus tentang action hook:
Action hooks are essentially placeholders. Wherever an action hook is placed, it will execute any code that has been "hooked" to it.
WordPress action hooks are a means of providing a way for other developers to insert their own code in specific locations within your code, in order to change or expand the functionality of your code.
Definisi pertama dijelaskan bahwa action hook adalah sebuah poin atau tanda yang kita letakkan pada sembarang proses dan nantinya akan mengeksekusi semua kode komputer yang kita kaitkan padanya. Pada definisi yang kedua dijelaskan bahwa dengan cara action hook inilah Wordpress mengikutsertakan developer-developer-nya untuk ikut menyisipkan kode-kode buatan mereka untuk diikutkan pada banyak "placeholder" yang telah disediakan oleh core Wordpress.
Action hook function reference
- has_action()
- add_action()
- do_action()
- do_action_ref_array()
- did_action()
- remove_action()
- remove_all_actions()
Ada 7 function reference action hook yang saya dapat dalam dokumentasi plugin API. Tapi yang akan sering kita temukan pada plugin atau theme sekarang adalah function do_action() dan add_action(). Fungsi do_action akan mengeksekusi semua hook action yang telah kita tambahkan dengan fungsi add_action. Kedua fungsi saling melengkapi, yang satu mengeksekusi proses yang diikutsertakan dan yang lain menambahkan proses untuk diikutsertakan. Contohnya kita meletakkan sebuah poin action dengan tag 'before_checkout_product'. Misalkan kita menginginkan agar sebelum proses checkout produk dieksekusi, mungkin ada developer lain yang ingin mengikutsertakan proses lain (hook) disini. Maka skenario kode yang akan kita buat akan tampak seperti ini:
$cart=["product_id1"=>1,"product_id2"=>2];

$customer=["name"=>"Mustofa","email"=>"...", ...];

do_action("before_checkout_product",$cart,$customer);

checkout();
Untuk lebih memahami do_action diatas saya sarankanu untuk membaca dokumentasinya di sini. Pada parameter pertama adalah nama tag action yang ingin Anda eksekusi, sedangkan parameter selanjutnya, kedua, ketiga dan seterusnya adalah arguments yang bisa Anda lewatkan pada fungsi hook yang developer lain dapat mengakses. Cukup simple bukan, dengan cara seperti inilah Wordpress bekerja. Ada banyak poin-poin action hook yang dibuat oleh core Wordpress, Anda dapat menemukan semuanya pada codex atau pada website Adam R Brown di sini.
Sekarang untuk mengkaitkan kode yang kita buat pada action hook 'before_checkout_product', kita dapat melakukannya dengan menggunakan fungsi add_action().
add_action('before_checkout_product',function($cart,$customer){

notify_admin($cart,$customer['email']);

},10,2);
Kita dapat meletakkan action hook diatas pada sembarang tempat pada function.php atau pada plugin wordpress kita. Kalau Anda membaca dokumentasi tentang fungsi ini, maka Anda akan mendapati bahwa ada 4 arguments yang diterima fungsi ini yaitu tag, fungsi callback, prioritas, dan jumlah arguments yang diterima fungsi callback.
add_action( $tag, $function_to_add, $priority, $accepted_args );
Argument prioritas(ketiga) secara default bernilai 10, ini artinya hook yang kita buat akan dieksekusi setelah fungsi hook bernilai 1,2,3,...,9 selesai dieksekusi. Sedangkan argument keempat secara default bernilai 1, ini artinya ada 1 arguments yang harus diikutkan oleh fungsi callback.  Pada tag 'before_checkout_product' ada 2 variabel yang diikutkan($cart dan $customer), maka pada argument keempat ini, harus kita isi dengan nilai 2.

Filter Hook

Filter hook ini sama mudahnya dipahami. Alasan kita memakai filter hook adalah memodifikasi sebuah nilai, memfilter sebuah nilai atau juga mereplace sebuah nilai dengan nilai baru. Sama seperti action hook, disini juga ada fungsi yang memfilter sebuah nilai dengan fungsi-fungsi filter hook yang dikaitkan (apply_filter) dan juga ada fungsi wordpress untuk menambahkan filter hook untuk dikaitkan (add_filter). Contohnya seperti kita memiliki sebuah fungsi dengan nama email_notify yang tampak seperti ini:
...
$message='Dear Mustofa, Bisakomputer telah memperbarui tampilan website menjadi responsive website. Sekarang Anda dapat membuka bisakomputer.com dengan memakai beberapa device mobile yang Anda gunakan.';

$message=apply_filter('email_notify_message',$message);

wp_mail( $to, $subject, $message, $headers, $attachments );
Dari kode diatas, kita menginginkan nilai sebuah variabel $message dapat difilter oleh developer lain. Difilter disini, bisa bermaksud mengganti nilai message, menambahkan sesuatu ke message dan lain-lain. Kemudian kita mendefinisikan apply_filter dengan tag 'email_notify_message' untuk memfilter, memodifikasi, atau mereplace nilai $message dengan filter hook yang dikaitkan pada 'email_notify_message'. Core Wordpress banyak menyediakan filter-filter tag yang dapat mengubah nilai varibel pada pemrosesannya. Kita dapat menemukannnya pada dokumentasi codex atau link berikut di sini.
Sama seperti action yang memanfaatkan fungsi add_action, kita dapat memanfaatkan add_filter untuk menambahkan filter fungsi buatan kita dengan cara seperti ini:
add_filter('email_notify_message',function($message){

// Mengganti nilai message
$new_message ='Hello Mustofa, bla..bla..bla';

// Menambahkan nilai message
$new_message = $message.' Salam bisakomputer.com';

return $new_message;

});
Yang perlu kita perhatikan disini adalah fungsi filter hook mengembalikan sebuah nilai. Pada add_filter juga terdapat 4 arguments yang bisa dimasukkan yaitu tag filter, fungsi callback, prioritas dan terakhir jumlah arguments yang diikutkan.
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Filter hook ini banyak dipakai oleh developer theme Wordpress agar theme buatannya dapat dibuat child theme. Berikut adalah fungsi-fungsi referensi Wordpress untuk keperluan filter hook ini.
Filter hook function reference
- has_filter()
- add_filter()
- apply_filters()
- current_filter()
- merge_filters()
- remove_filter()
- remove_all_filters()

Penutup

Baik action dan filter penting harus kita pahami untuk menjadi developer Wordpress. Perbedaan fungsi hook action dan filter adalah fungsi hook tidak perlu mengembalikan nilai sedangkan fungsi hook filter mengembalikan nilai. Dengan memahami kedua hal ini, menurut saya, kita akan cepat menguasai Wordpress dan kemudian membuat plugin dan theme sendiri. Oke, demikian artikel ini. Ada banyak hal yang ingin saya share tentang Wordpress di BisaKomputer ini dan kalau memang ini bermanfaat bagi teman-teman, saya harap Anda dapat meninggalkan sebuah komentar disini :)

* Artikel ini pernah diposting bisakomputer.com tertanggal September 12, 2012 

3 comments: