Implementasi WP-CRON pada Plugin

implementasi-wp-cron-pada-plugin
Halo, lama sudah saya tidak menulis artikel dikarenakan kesibukan yang saya lakukan. Pada kesempatan ini saya ingin menjelaskan mengenai fungsi dan cara penggunaan WP-Cron pada plugin.

WP-Cron adalah sebuah cron yang secara khusus disediakan oleh WordPress. Script atau code WP-Cron selalu di eksekusi ketika ada vistor mengunjungi website kita. Jadi dengan cara ini WP dapat melakukan penjadwalan untuk melakukan task atau pekerjaan tertentu di waktu yang telah ditentukan.

Akan tetapi waktu untuk melakukan task tersebut sangat bergantung pada jumlah visitor. Jika sebuah webstite jumlah visitor atau kunjungan perharinya sangat sedikit, maka WP-Cron bisa saja terlambat di eksekusi.

Tentu hal ini pasti tidak jadi soal jika blog kita ramai pengunjung dan selalu dikunjungi oleh visitor setiap menitnya, kecil kemungkinan Penjadwalan Cron kita terlambat dieksekusi.

Tentu ada cara untuk mengakali hal ini, yaitu dengan cara menggunakan Cron pada hosting kita. Tapi topik ini akan saya bahas pada artikel yang lainnya.

Penjelasan Mengenai WP-Cron

Ada dua function yang biasanya digunakan untuk mendaftarkan jadwal kita, yaitu:

1. wp_schedule_event
2. wp_schedule_single_event

Terdapat perbedaan antara dua fungsi diatas, yaitu: wp_schedule_event digunakan jika kita ingin menjadwalkan sesuatu yang rutin (hourly, twicedaily, daily). Sedangkan wp_schedule_single_event hanya di eksekusi sekali, setelah itu cron ini akan otomatis dihapus.

Hal Yang Harus diperhatikan dalam menggunakan WP-Cron

Untuk mengaplikasikan WP-Cron pada plugin kamu, perhatikan hal ini, yaitu: Pastikan 2 fungsi diatas hanya di panggil satu kali. Jadi kita membutuhkan kondisi/syarat agar fungsi tersebut dipanggil, pastikan kedua fungsi tersebut hanya di eksekusi ketika sudah memenuhi kondisi yang kita tentukan.

Jika hal ini tidak dilakukan, maka WP akan mencatat Cron yang sama berulang-ulang, sehingga jadwal yang sama akan menumpuk di dalam database. Hasilnya, task yang ingin kita eksekusi jadi di lakukan berulang-ulang. Hal ini tentu sangat memboroskan memory dan memperlambat blog kita.

Cara Implementasi WP-Cron

1. wp_schedule_even

Contohnya jika kita ingin plugin kita melakukan cek secara rutin mengenai ke-valid-an token API. Kita dapat menggunakan script seperti ini. Pengecekan akan dilakukan rutin setiap hari sekali.

register_activation_hook(__FILE__, 'my_activation');

function my_activation() {
    if (! wp_next_scheduled ( 'check_api_token' )) {
	wp_schedule_event(time(), 'daily', 'check_api_token');
    }
}

add_action('check_api_token', 'do_check');

function check_token() {
    $token = get_option( 'your_plugin_token', true );
    if( ! is_token_active( $token ) ){
        // do something
    }
}

2. wp_schedule_single_event

Contohnya kita ingin mengirimkan email pada pelanggan kita pada jam 12 siang. Karena task ini hanya terjadi sekali kita menggunakan wp_schedule_single_event.


$time = strtotime('12:00:00') - ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); //set waktu eksekusi pada jam 12 siang

$args = array( 'email' => 'your@email', 'subject' => 'subject mail', 'message' => 'hello there!!!' );	
							
/* sebelum di wp_schedule_single_event dieksekusi pastikan kita menerapkan kondisi */

if( get_option( 'sent_at_12', true ) != 'done' ){
   wp_schedule_single_event( $time, 'send_email_at_12', $args );
   update_option( 'sent_at_12', 'done' );
}

add_action( 'send_email_at_12', 'do_send_email', 10, 3 );

function do_send_email( $to, $subject, $message ){
   wp_mail( $to, $subject, $message );
}