WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

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

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

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

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

add_action( 'comment_post', 'action_function_name_11', 10, 3 );
function action_function_name_11( $comment_ID, $comment_approved, $commentdata ) {
	// Действие...
}
$comment_ID(число)
ID комментария, который был добавлен в БД.
$comment_approved(логический/число)

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

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

С версии 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,
);

Примеры

#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 2170
do_action( 'comment_post', $comment_ID, $commentdata['comment_approved'], $commentdata );

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

wp-includes/default-filters.php 440
add_action( 'comment_post', 'wp_new_comment_notify_moderator' );
wp-includes/default-filters.php 441
add_action( 'comment_post', 'wp_new_comment_notify_postauthor' );
8 комментов
  • Ел edda.kz

    Как вевести сообщение пользователью, когда он оставил комментарии?

    1
    Ответить29.Дек.2018 23:08 #
  • Если хук срабатывает сразу после добавления комментария в БД, то какой смысл имеет проверка if( $comment_approved == 0 ) в примере? Ну, даже если проверила и не отправила уведомление, а потом, как быть, когда $comment_approved стал true. Ведь после одобрения комментария уже уведомление не отправится, так?

    1
    Ответить5.Фев.2020 09:21 #
    • Kama7752

      Хорошее замечание! Закомментил эти строки - это мне так надо было просто когда-то поэтому в пример попало.

      Ответить6.Фев.2020 08:03 #
  • Кама, поправьте пожалуйста код: во входных параметрах стоит $comment_ID, а в переменную кладете get_comment( $comment_id ). Так письмо не отправляет, да и вообще функция так не работает.

    1
    Ответить7.Фев.2020 19:17 #
  • Сообразить не могу, какой хук подвешен на одобрение (approve) комментария?

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

    Неужели WordPress этого не предусмотрел? Поэтому пришлось сюда писать вопрос.

    Ответить16.Июн.2020 15:23 #
    • Ну, это в моем стиле: мучался 2 дня, но, как только спросил и сразу ответ нашел https://wp-kama.ru/function/wp_transition_comment_status , хотя всю страницу хуков обсмотрел. Потом, правда в поиске справа вбил approve и чудесно вылез список разных ссылок.

      Хотя, да, прямолинейного какого-то хука навроде trashed_comment или spammed_comment в виде approve_comment не увидел.

      Ответить16.Июн.2020 15:40 #