# WP_NOTIFY_MODERATOR() │ WP 1.0.0
Функция wp_notify_moderator() уведомляет модератора сайта о новом комментарии, ожидающем одобрения.
## Описание функции
Эта функция является подменяемой. Это означает, что она может быть изменена в плагине. Функция начинает работать только после загрузки всех плагинов, поэтому вы не можете вызывать её напрямую из другого плагина. Вместо этого вызов надо делать в хуке plugins_loaded или позднее, например, в хуке init.
### Подмена функции
Чтобы изменить эту функцию, вы можете создать плагин (или функциональный плагин), в котором будет функция с таким же именем. Это заменит оригинальную функцию.
### Хуки, используемые в функции
- notify_moderator
- comment_moderation_recipients
- comment_moderation_headers
- comment_moderation_text
- comment_moderation_subject
## Возврат значения
Функция всегда возвращает true.
## Использование
```php
wp_notify_moderator( $comment_id );
$comment_id(int): идентификатор комментария, обязательный параметр.
Примеры
Изменение стандартной функции
Если вы хотите изменить стандартное поведение функции wp_notify_moderator(), создайте плагин со следующим кодом:
Примечания
global $wpdb: используется для получения объекта базы данных WordPress.- Эта функция использует фильтр
notify_moderator, чтобы определить, должен ли модератор сайта получать уведомления, переопределяя настройки сайта.
Измененный код функции
function wp_notify_moderator( $comment_id ) {
global $wpdb;
$maybe_notify = get_option( 'moderation_notify' );
$maybe_notify = apply_filters( 'notify_moderator', $maybe_notify, $comment_id );
if ( ! $maybe_notify ) {
return true;
}
$comment = get_comment( $comment_id );
$post = get_post( $comment->comment_post_ID );
$user = get_userdata( $post->post_author );
$emails = array( get_option( 'admin_email' ) );
if ( $user && user_can( $user->ID, 'edit_comment', $comment_id ) && ! empty( $user->user_email ) ) {
if ( 0 !== strcasecmp( $user->user_email, get_option( 'admin_email' ) ) ) {
$emails[] = $user->user_email;
}
}
$comment_author_domain = '';
if ( WP_Http::is_ip_address( $comment->comment_author_IP ) ) {
$comment_author_domain = gethostbyaddr( $comment->comment_author_IP );
}
$comments_waiting = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'" );
$blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
$comment_content = wp_specialchars_decode( $comment->comment_content );
$message_headers = '';
$emails = apply_filters( 'comment_moderation_recipients', $emails, $comment_id );
$message_headers = apply_filters( 'comment_moderation_headers', $message_headers, $comment_id );
foreach ( $emails as $email ) {
$user = get_user_by( 'email', $email );
if ( $user ) {
$switched_locale = switch_to_user_locale( $user->ID );
} else {
$switched_locale = switch_to_locale( get_locale() );
}
switch ( $comment->comment_type ) {
case 'trackback':
$notify_message = sprintf( __( 'Новая ссылка на пост "%s" ожидает вашего одобрения' ), $post->post_title ) . "rn";
$notify_message .= get_permalink( $comment->comment_post_ID ) . "rnrn";
$notify_message .= sprintf( __( 'Сайт: %1$s (IP-адрес: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "rn";
$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "rn";
$notify_message .= __( 'Содержимое ссылки: ' ) . "rn" . $comment_content . "rnrn";
break;
case 'pingback':
$notify_message = sprintf( __( 'Новая обратная ссылка на пост "%s" ожидает вашего одобрения' ), $post->post_title ) . "rn";
$notify_message .= get_permalink( $comment->comment_post_ID ) . "rnrn";
$notify_message .= sprintf( __( 'Сайт: %1$s (IP-адрес: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "rn";
$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "rn";
$notify_message .= __( 'Содержимое обратной ссылки: ' ) . "rn" . $comment_content . "rnrn";
break;
default: // Комментарии.
$notify_message = sprintf( __( 'Новый комментарий на пост "%s" ожидает вашего одобрения' ), $post->post_title ) . "rn";
$notify_message .= get_permalink( $comment->comment_post_ID ) . "rnrn";
$notify_message .= sprintf( __( 'Автор: %1$s (IP-адрес: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "rn";
$notify_message .= sprintf( __( 'Email: %s' ), $comment->comment_author_email ) . "rn";
$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "rn";
if ( $comment->comment_parent ) {
$notify_message .= sprintf( __( 'В ответ на: %s' ), admin_url( "comment.php?action=editcomment&c={$comment->comment_parent}#wpbody-content" ) ) . "rn";
}
$notify_message .= sprintf( __( 'Комментарий: %s' ), "rn" . $comment_content ) . "rnrn";
break;
}
$notify_message .= sprintf( __( 'Одобрить: %s' ), admin_url( "comment.php?action=approve&c={$comment_id}#wpbody-content" ) ) . "rn";
if ( EMPTY_TRASH_DAYS ) {
$notify_message .= sprintf( __( 'Удалить в корзину: %s' ), admin_url( "comment.php?action=trash&c={$comment_id}#wpbody-content" ) ) . "rn";
} else {
$notify_message .= sprintf( __( 'Удалить: %s' ), admin_url( "comment.php?action=delete&c={$comment_id}#wpbody-content" ) ) . "rn";
}
$notify_message .= sprintf( __( 'Пометить как спам: %s' ), admin_url( "comment.php?action=spam&c={$comment_id}#wpbody-content" ) ) . "rn";
$notify_message .= sprintf(
_n(
'В данный момент %s комментарий ожидает одобрения. Пожалуйста, перейдите в панель модерации:',
'В данный момент %s комментария ожидают одобрения. Пожалуйста, перейдите в панель модерации:',
$comments_waiting
),
number_format_i18n( $comments_waiting )
) . "rn";
$notify_message .= admin_url( 'edit-comments.php?comment_status=moderated#wpbody-content' ) . "rn";
$subject = sprintf( __( '[%1$s] Пожалуйста,moderate: "%2$s"' ), $blogname, $post->post_title );
$notify_message = apply_filters( 'comment_moderation_text', $notify_message, $comment_id );
$subject = apply_filters( 'comment_moderation_subject', $subject, $comment_id );
wp_mail( $email, wp_specialchars_decode( $subject ), $notify_message, $message_headers );
if ( $switched_locale ) {
restore_previous_locale();
}
}
return true;
}
Связанные функции
wp_notify_postauthor(): уведомление автора поста.- Прочие функции для работы с комментариями, например:
cancel_comment_reply_link(): ссылка для отмены ответа на комментарий.comment_form(): форма комментариев.get_comments(): получение комментариев.- И многие другие, которые помогут в работе с комментариями в WordPress.