Mengirim notifikasi email ketika komentar balasan baru dibuat

Saya baru sadar bahwa ternyata WordPress tidak mengirimkan notifikasi ketika seseorang membalas komentar pada suatu artikel. Admin websitenya sih dapat email notifikasi bahwa ada komentar baru masuk, tapi si pemberi komentar sebelumnya bakal tidak tau kalau ada yang memberikan balasan atau respons pada komentarnya, walaupun yang memberikan balasan adalah si admin website.

Jadi saya buat plugin sederhana yang punya tugas sangat sederhana,  mengecek kalau ada komentar baru masuk yang berupa balasan pada sebuah komentar, maka akan dikirim email notifikasi ke pemilik komentar sebelumnya.

WordPress memiliki action hook wp_insert_comment yang akan dijalankan setelah sebuah komentar baru saja disimpan ke database. Kita bisa menambahkan sebuah function yang akan dijalankan ketika WordPress melakukan action wp_insert_comment dengan cara sebagai berikut:

add_action( "wp_insert_comment", "ysu_new_comment_created", 99, 2 );

function ysu_new_comment_created( $comment_id, $comment ) {
   if ( $comment->comment_parent > 0 ) {
      ysu_send_email_notification( $comment );
   }
}

Jadi ketika ada action wp_insert_comment, WordPress akan menjalankan function ysu_new_comment_created(). 99 adalah urutan kapan function tersebut di jalankan in case ada banyak function lain yang juga di jalankan pada action wp_insert_comment. 2 adalah jumlah parameter yang akan diterima oleh function ysu_new_comment_created().

Pada function ysu_new_comment_created() sendiri, isinya simple dan mestinya bisa kebaca dari kodingannya, kalau komentar nya punya komentar induk (comment_parent) maka lakukan function ysu_send_email_notification().

function ysu_send_email_notification( $comment ) {
   $post = get_post( $comment->comment_post_ID );

   add_filter( "wp_mail_content_type", "ysu_set_email_content_type" );

   wp_mail( ysu_get_comment_author_email( $comment ), ysu_get_email_subject( $post ), ysu_get_email_content( $post, $comment ) );

   remove_filter( "wp_mail_content_type", "ysu_set_email_content_type" );
}

Berikutnya, function ysu_send_email_notification() setelah menerima parameter comment, hal pertama yang dikukan adalah mencari artikel apa yang dikomentarin dengan menggunakan get_post(), ini akan dipakai untuk keperluan yang akan dibahas berikutnya.

Secara default, WordPress akan mengirimkan email berupa teks biasa, artinya kita gak bisa memasukkan element HTML kedalam email seperti membuat link, dan basic formatting lainnya. Untuk mengatasi hal tersebut, WordPress punya filter wp_mail_content_type yang bisa diubah supaya bisa mengirimkan berkas dengan format HTML. untuk itu kita menjalankan add_filter() dengan dua parameter, wp_mail_content_type sebagai filter yang ingin kita hijact dan ysu_set_email_content_type yang akan mengeset tipe konten email yang dikirim.

function ysu_set_email_content_type( $contentType ) {
   return "text/html";
}

As simple as that, btw, khusus untuk filter wp_mail_content_type ini, dianjurkan untuk melakukan remove_filter setelah digunakan karena berpengaruh pada sistem email WordPress.

Balik ke function ysu_send_email_notification(), berikutnya setelah add_filter() adalah wp_mail() yang merupakan function bawaan WordPress tujuannya untuk mengirim email. wp_mail() punya 3 parameter utama: email tujuan, subject email dan konten email yang secara berurutan saya isi dengan fungsi ysu_get_comment_author_email(), ysu_get_email_subject(), dan ysu_get_email_content().

function ysu_get_comment_author_email( $comment ) {
   $replied_comment = get_comment( $comment->comment_parent );

   return $replied_comment->comment_author_email;
}

Pertama, ysu_get_comment_author_email() untuk mengambil email pemilik komentar yang dikomentarin. Sebelumnya, mesti nyari dulu komentar sebelumnya yang dibalas dengan menggunakan get_comment() setelah ketemu, email pemilik komentar sebelumnya bisa diakses pada attribute comment_author_email.

function ysu_get_email_subject( $post ) {
   return sprintf( __( "Seseorang membalas komentar anda pada artikel \"%s\"", "reply-notifications" ), $post->post_title );
}

Berikutnya adalah ysu_get_email_subject(). Function ini untuk men-set subject email. Saya ingin subject emailnya seperti “Seseorang membalas komentar anda pada “judul_artikel”.  Seperti biasa jangan lupa masalah translasi-able menggunakan __().

function ysu_get_email_content( $post, $comment ) {
   return sprintf( __( "%s<br><br><a href='%s'>klik disini untuk membuka artikel</a>", "reply-notifications" ), $comment->comment_content, get_permalink( $post->ID ) );
}

Terakhir, ysu_get_email_content() untuk mengisi pesan email yang dikirimkan. Disini saya menyertakan seluruh isi komentar balasan beserta link untuk membuka artikel yang diberikan komentar.

Kode sederhana ini bisa di download  ataupun dilihat  keseluruhannya di github.

Link dokumentasi terkait:

Suka dengan artikel diatas?

Setiap akhir pekan, saya membuat artikel singkat beserta beberapa link terkait dengan topik freelancing, kerja remote, productivity, modern work and life, self improvement dan juga seputar web development. Tertarik? masukkan email mu pada form dibawah ini:

2 Balasan untuk “Mengirim notifikasi email ketika komentar balasan baru dibuat”

    1. Ahaha, gak tau, bukan plugin yang fundamental dan rasanya gak jauh berbeda ama plugin yang di link mas eric tadi 😀 kepengen sih ngerasain seleksi dari tim theme dan plugin WP, ntar lah kapan-kapan.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *