wp_notify_moderator()WP 1.0.0

Notifies the moderator of the site about a new comment that is awaiting approval.

Pluggable function — this function can be replaced from a plugin. It means that this function is defined (works) only after all plugins are loaded (included), but before this moment this function has not defined. Therefore, you cannot call this and all functions depended on this function directly from a plugin code. They need to be called on plugins_loaded hook or later, for example on init hook.

Function replacement (override) — in must-use or regular plugin you can create a function with the same name, then it will replace this function.

Return

true. Always returns true.

Usage

wp_notify_moderator( $comment_id );
$comment_id(int) (required)
Comment ID.

Examples

0

#1 Change the standard function

To change the function as we want, we need to create a plugin or MU plugin with such code:

<?php
/*
Plugin Name: Replacement of the base function wp_notify_moderator()
*/

if ( ! function_exists( 'wp_notify_moderator' ) ){

	function wp_notify_moderator( $comment_id ) {
		// here is the code of the function, you can copy 
		// the basic code and change it to suit your needs
	}
}
?>

Notes

  • Global. wpdb. $wpdb WordPress database abstraction object.

Uses the notify_moderator filter to determine whether the site moderator should be notified, overriding the site setting.

Changelog

Since 1.0.0 Introduced.

wp_notify_moderator() code WP 6.4.3

function wp_notify_moderator( $comment_id ) {
	global $wpdb;

	$maybe_notify = get_option( 'moderation_notify' );

	/**
	 * Filters whether to send the site moderator email notifications, overriding the site setting.
	 *
	 * @since 4.4.0
	 *
	 * @param bool $maybe_notify Whether to notify blog moderator.
	 * @param int  $comment_id   The ID of the comment for the notification.
	 */
	$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 );
	// Send to the administration and to the post author if the author can modify the comment.
	$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;
		}
	}

	$switched_locale = switch_to_locale( get_locale() );

	$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'" );

	/*
	 * The blogname option is escaped with esc_html() on the way into the database in sanitize_option().
	 * We want to reverse this for the plain text arena of emails.
	 */
	$blogname        = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
	$comment_content = wp_specialchars_decode( $comment->comment_content );

	switch ( $comment->comment_type ) {
		case 'trackback':
			/* translators: %s: Post title. */
			$notify_message  = sprintf( __( 'A new trackback on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
			$notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
			/* translators: 1: Trackback/pingback website name, 2: Website IP address, 3: Website hostname. */
			$notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
			/* translators: %s: Trackback/pingback/comment author URL. */
			$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
			$notify_message .= __( 'Trackback excerpt: ' ) . "\r\n" . $comment_content . "\r\n\r\n";
			break;

		case 'pingback':
			/* translators: %s: Post title. */
			$notify_message  = sprintf( __( 'A new pingback on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
			$notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
			/* translators: 1: Trackback/pingback website name, 2: Website IP address, 3: Website hostname. */
			$notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
			/* translators: %s: Trackback/pingback/comment author URL. */
			$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
			$notify_message .= __( 'Pingback excerpt: ' ) . "\r\n" . $comment_content . "\r\n\r\n";
			break;

		default: // Comments.
			/* translators: %s: Post title. */
			$notify_message  = sprintf( __( 'A new comment on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
			$notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
			/* translators: 1: Comment author's name, 2: Comment author's IP address, 3: Comment author's hostname. */
			$notify_message .= sprintf( __( 'Author: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
			/* translators: %s: Comment author email. */
			$notify_message .= sprintf( __( 'Email: %s' ), $comment->comment_author_email ) . "\r\n";
			/* translators: %s: Trackback/pingback/comment author URL. */
			$notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";

			if ( $comment->comment_parent ) {
				/* translators: Comment moderation. %s: Parent comment edit URL. */
				$notify_message .= sprintf( __( 'In reply to: %s' ), admin_url( "comment.php?action=editcomment&c={$comment->comment_parent}#wpbody-content" ) ) . "\r\n";
			}

			/* translators: %s: Comment text. */
			$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
			break;
	}

	/* translators: Comment moderation. %s: Comment action URL. */
	$notify_message .= sprintf( __( 'Approve it: %s' ), admin_url( "comment.php?action=approve&c={$comment_id}#wpbody-content" ) ) . "\r\n";

	if ( EMPTY_TRASH_DAYS ) {
		/* translators: Comment moderation. %s: Comment action URL. */
		$notify_message .= sprintf( __( 'Trash it: %s' ), admin_url( "comment.php?action=trash&c={$comment_id}#wpbody-content" ) ) . "\r\n";
	} else {
		/* translators: Comment moderation. %s: Comment action URL. */
		$notify_message .= sprintf( __( 'Delete it: %s' ), admin_url( "comment.php?action=delete&c={$comment_id}#wpbody-content" ) ) . "\r\n";
	}

	/* translators: Comment moderation. %s: Comment action URL. */
	$notify_message .= sprintf( __( 'Spam it: %s' ), admin_url( "comment.php?action=spam&c={$comment_id}#wpbody-content" ) ) . "\r\n";

	$notify_message .= sprintf(
		/* translators: Comment moderation. %s: Number of comments awaiting approval. */
		_n(
			'Currently %s comment is waiting for approval. Please visit the moderation panel:',
			'Currently %s comments are waiting for approval. Please visit the moderation panel:',
			$comments_waiting
		),
		number_format_i18n( $comments_waiting )
	) . "\r\n";
	$notify_message .= admin_url( 'edit-comments.php?comment_status=moderated#wpbody-content' ) . "\r\n";

	/* translators: Comment moderation notification email subject. 1: Site title, 2: Post title. */
	$subject         = sprintf( __( '[%1$s] Please moderate: "%2$s"' ), $blogname, $post->post_title );
	$message_headers = '';

	/**
	 * Filters the list of recipients for comment moderation emails.
	 *
	 * @since 3.7.0
	 *
	 * @param string[] $emails     List of email addresses to notify for comment moderation.
	 * @param int      $comment_id Comment ID.
	 */
	$emails = apply_filters( 'comment_moderation_recipients', $emails, $comment_id );

	/**
	 * Filters the comment moderation email text.
	 *
	 * @since 1.5.2
	 *
	 * @param string $notify_message Text of the comment moderation email.
	 * @param int    $comment_id     Comment ID.
	 */
	$notify_message = apply_filters( 'comment_moderation_text', $notify_message, $comment_id );

	/**
	 * Filters the comment moderation email subject.
	 *
	 * @since 1.5.2
	 *
	 * @param string $subject    Subject of the comment moderation email.
	 * @param int    $comment_id Comment ID.
	 */
	$subject = apply_filters( 'comment_moderation_subject', $subject, $comment_id );

	/**
	 * Filters the comment moderation email headers.
	 *
	 * @since 2.8.0
	 *
	 * @param string $message_headers Headers for the comment moderation email.
	 * @param int    $comment_id      Comment ID.
	 */
	$message_headers = apply_filters( 'comment_moderation_headers', $message_headers, $comment_id );

	foreach ( $emails as $email ) {
		wp_mail( $email, wp_specialchars_decode( $subject ), $notify_message, $message_headers );
	}

	if ( $switched_locale ) {
		restore_previous_locale();
	}

	return true;
}