Уведомление модератора в WordPress: wp_notify_moderator() – описание функции

# 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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *