Отправка email об ответе на комментарий

Коротко и по делу. Приведённый ниже код отправляет email уведомления только об ответе на комментарий всем участникам конкретной ветки обсуждения. Если не знаете куда его вставить, разместите в function.php вашей темы. Разумеется, работает только на WordPress.

add_action( 'wp_set_comment_status', 'mytheme_send_email_about_reply_comment', 10, 1 );
add_action( 'wp_insert_comment', 'mytheme_send_email_about_reply_comment', 10, 1 );
function mytheme_send_email_about_reply_comment( $comment_id ) {
	$comment = get_comment( $comment_id );
	if ( $comment->comment_parent != '0' && $comment->comment_approved == '1' ) {
		$emails = array();
		$my_comment_id = $comment_id;
		while( $my_comment_id > 0  ) {
			$my_comment = get_comment( $my_comment_id );
			$my_comment_id = $my_comment->comment_parent;
			$emails[] = $my_comment->comment_author_email;
		}
		if ( $emails ) {
			$to = array_unique( $emails );
			$from = get_option( 'blogname' );
			$subject = '[' . $from . '] ' . __( 'New reply to your comment', 'mytheme' );
			$message = $comment->comment_author . ' ' . __( 'receive a new reply to your comment', 'mytheme' ) . '.<br><br>';
			$message .= '<i>' . __( 'Text of comment', 'mytheme' ) . ':</i><br>';
			$message .= $comment->comment_content . '<br><br>';
			$message .= __( 'To answer it, follow the link', 'mytheme' ) . '<br>';
			$message .= '<a href="' . get_permalink( (int) $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID . '" target="_blank">' . get_the_title( (int) $comment->comment_post_ID ) . '</a><br><br>';
			$message .= '<hr>';
			$message .= __( 'This email was generated automatically, please do not reply to it', 'mytheme' );
			$headers = array(
				__( 'From', 'mytheme' ) . get_option( 'blogname' ),
				'content-type: text/html',
			);
			wp_mail( $to, $subject, $message, $headers );
		}
	}
}

Работает сниппет следующим образом. При отправке нового комментария, WordPress проверяет, является ли он ответом на чью-либо реплику. Так как вложенность дерева комментариев может быть многоуровневой, код получает список всех email, которые являются родительским для текущего, и отправляет им уведомления с текстом нового коммента. Вот и всё.

Функция mytheme_send_email_about_reply_comment вешается на 2 хука: wp_insert_comment и wp_set_comment_status. Первый срабатывает при добавлении комментария в базу данных со статусом «одобрено». Если на сайте работает премодерация, то есть новые комментарии добавляются только после ручного одобрения, вместо wp_insert_comment срабатывает второй хук.

Чтобы код правильно работал, на вашем сайте должны быть организованы древовидные комментарии. Для этого необходимо зайти в админке сайта Настройки->Обсуждение. Затем поставьте галку напротив пункта «Разрешить древовидные (вложенные) комментарии».

Данный код, с небольшими изменениями, используется практически во всех темах в нашем каталоге премиум шаблонов.

Немного лирики

Уведомления об ответах на комментарии, имеет массу плюсов. Это не только возможность получить обратную связь, но и создаёт условия для более живого общения. Часто, в комментариях можно наблюдать картину, когда между ответами участников обсуждения проходит довольно много времени. Такие обсуждения вялые и часто не имеют развития.

Однако, благодаря уведомлениям, участники обсуждения получают новые ответы практически мгновенно. От этого выигрывают все. Пользователь получает ответ, а автор блога — живое обсуждение.

Конечно, вместо приведённого сниппета вы можете использовать плагины Comment Reply Notification или Subscribe To Comments. Однако, если вы предпочитаете минимализм, или нужно что-то простое, приведённый вариант — самый оптимальный.

Некоторые авторы позволяют читателям подписаться на все новые комментарии. На мой взгляд, такой подход имеет больше минусов, чем плюсов. Если вы активно комментируете другие блоги с подпиской на новые комментарии, вероятно вам хорошо известно, как много времени уходит на то, чтобы перебрать все входящие сообщения.

С другой стороны, приведённый выше код довольно прост, и выполняет свою функцию на 5+. Ответы получают только целевые пользователи. Пусть ваши читатели узнают, что вы отвечаете на их вопросы. Они будут в восторге! У большинства людей есть дела поважнее, чем регулярно проверять каждый пост, который они когда-либо комментировали, чтобы узнать, а не ответил ли автор на их комментарий.

Независимо от того, используете ли вы Comment Reply Notification, мой код или какой-либо другой плагин, поддерживайте живое обсуждение на вашем сайте.

Добавить комментарий

Made with ❤︎ by WP Store