WordPress как на ладони

comment_postхук-событиеWP 1.2.0

Срабатывает сразу после добавления комментария в базу данных. Параметры передаваемые событием: ID комментария, его статус и данные.

Заметка: для авторов у которых есть права редактировать комментарии, уведомление о комментировании их постов отправляется автоматически, если в настройках установлена опция: Настройки > Обсуждения > Автор должен иметь ранее одобренные комментарии. За эту отправку писем отвечает функция wp_notify_moderator().

Использование

add_action( 'comment_post', 'wp_kama_comment_post_action', 10, 3 );

/**
 * Function for `comment_post` action-hook.
 * 
 * @param int        $comment_id       The comment ID.
 * @param int|string $comment_approved 1 if the comment is approved, 0 if not, 'spam' if spam.
 * @param array      $commentdata      Comment data.
 *
 * @return void
 */
function wp_kama_comment_post_action( $comment_id, $comment_approved, $commentdata ){

	// action...
}
$comment_ID(число)
ID комментария, который был добавлен в БД.
$comment_approved(строка/число)

Статус подтверждения комментария, может быть:

  • 0 (false) - не подтвержден
  • 1 (true) - подтвержден
  • 'spam' - спам
$commentdata(массив) (WP 4.5)

Массив данных комментария в виде ассоциативного массива. Ключи массива = полю таблицы в БД. Пример массива:

$data = array(
	'comment_post_ID'      => 1,
	'comment_author'       => 'admin',
	'comment_author_email' => 'admin@admin.com',
	'comment_author_url'   => 'http://',
	'comment_content'      => 'текст коммента',
	'comment_type'         => '',
	'comment_parent'       => 0,
	'user_id'              => 1,
	'comment_author_IP'    => '127.0.0.1',
	'comment_agent'        => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)',
	'comment_date'         => current_time('mysql'),
	'comment_approved'     => 1,
);

Примеры

0

#1 Уведомим автора поста о комментарии к его посту

Предположим, что у нас на сайте посты публикуют несколько авторов и нужно, чтобы при комметировании записи, автору на почту отправлялось письмо-уведомление о добавлении нового комментария к записи:

add_action( 'comment_post', 'author_new_comment_notify', 10, 2 );
function author_new_comment_notify( $comment_ID, $comment_approved ){
	// выходим если комментарий не одобрен
	//if( $comment_approved == 0 )
	//  return;

	$comment = get_comment( $comment_ID );
	$post = get_post( $comment->comment_post_ID );
	$user = get_userdata( $post->post_author );

	if( empty( $user->user_email ) )
		return;

	// сообщение
	$message  = 'Новый ответ к вашей записи: '. $post->post_title . "\r\n";
	$message .= get_permalink($comment->comment_post_ID) . "\r\n\r\n";
	$message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
	$message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
	$message .= 'Текст ответа:' . "\r\n" . $comment->comment_content . "\r\n\r\n";

	// Тема
	$subject = '['.$_SERVER['HTTP_HOST'].'] Новый ответ к вашей записи.';

	// заголовки
	$headers = 'From: No Answer <noanswer@'. $_SERVER['HTTP_HOST'] .'>' . "\r\n";

	@wp_mail( $user->user_email, $subject, $message, $headers );
}

Список изменений

С версии 1.2.0 Введена.
С версии 4.5.0 The $commentdata parameter was added.

Где вызывается хук

wp_new_comment()
comment_post
wp-includes/comment.php 2320
do_action( 'comment_post', $comment_id, $commentdata['comment_approved'], $commentdata );

Где используется хук в WordPress

wp-includes/default-filters.php 503
add_action( 'comment_post', 'wp_new_comment_notify_moderator' );
wp-includes/default-filters.php 504
add_action( 'comment_post', 'wp_new_comment_notify_postauthor' );
7 комментариев
    Войти