Функция wp_transition_comment_status()
вызывается при изменении статуса комментария, чтобы запустить связанные хуки. Если новый статус комментария отличается от старого, функция вызовет два основных хука:
transition_comment_status
— вызывается с новым статусом, старым статусом и данными комментария.comment_$old_status_to_$new_status
— вызывается с данными комментария, где$old_status
и$new_status
заменяются на фактические статусы.
Также вызывается дополнительный хук:
comment_$new_status_$comment->comment_type
— вызывается каждый раз, когда функция вызывается, независимо от изменения статуса.
Эта функция используется в таких функциях, как wp_delete_comment()
, wp_set_comment_status()
и wp_update_comment()
для уведомления о смене статуса.
wp_transition_comment_status( string $new_status, string $old_status, WP_Comment $comment )
Параметры
- $new_status (string): Новый статус комментария. Возможные значения:
unapproved
,approved
,delete
. - $old_status (string): Старый статус комментария. Значение должно совпадать с одним из возможных значений
$new_status
. - $comment (WP_Comment): Объект комментария.
Возвращаемое значение
Функция не возвращает значений (возвращает null
).
Хуки
transition_comment_status
- Тип: Action
- Параметры:
$new_status
,$old_status
,$comment
comment_$old_status_to_$new_status
- Тип: Action
- Параметры:
$comment
comment_$new_status_$comment->comment_type
- Тип: Action
- Параметры:
$comment_ID
,$comment
Пример 1: Отправка уведомления при утверждении комментария
add_action( 'comment_unapproved_to_approved', 'notify_on_comment_approval' );
function notify_on_comment_approval( $comment ) {
// Проверяем, если статус комментария изменился с "не одобрен" на "одобрен"
$subject = 'Ваш комментарий был утвержден!';
$message = sprintf(
'Здравствуйте! Ваш комментарий с ID %d был утвержден и теперь доступен для просмотра. Текст комментария: %s',
$comment->comment_ID,
$comment->comment_content
);
// Отправляем email автору комментария
wp_mail( $comment->comment_author_email, $subject, $message );
}
Пример 2: Логирование изменений статуса комментария
add_action( 'transition_comment_status', 'log_comment_status_change', 10, 3 );
function log_comment_status_change( $new_status, $old_status, $comment ) {
$log_message = sprintf(
'Комментарий с ID %d изменил статус с %s на %s.',
$comment->comment_ID,
$old_status,
$new_status
);
// Логируем сообщение в файл
error_log( $log_message, 3, '/path/to/your/logfile.log' );
}
Возможные значения для $new_status и $old_status
unapproved
(или0
,hold
)approved
(или1
,approve
)delete
Хуки для различных статусов
transition_comment_status
comment_unapproved_to_approved
comment_unapproved_to_delete
comment_approved_to_unapproved
comment_approved_to_delete
comment_delete_to_approved
comment_delete_to_unapproved
comment_unapproved_$comment_type
comment_approved_$comment_type
comment_delete_$comment_type
Эта функция и связанные с ней хуки позволяют эффективно отслеживать и реагировать на изменения в статусе комментариев, обеспечивая гибкость и расширяемость в управлении комментариями на вашем сайте WordPress.
Заключение
Функция wp_transition_comment_status()
в WordPress используется для вызова хуков при изменении статуса комментария. Эта функция не изменяет статус комментария, а только уведомляет плагины, темы и другие функции ядра о смене статуса.