WordPress at a glance

wp_notify_postauthor() WP 1.0

Notify an author (and/or others) of a comment/trackback/pingback on a post.

This is a pluggable function, and it can be replaced by 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 a plugin you can create a function with the same name, then it replace this function.

Return

true/false. True on completion. False if no email addresses were specified.

Usage

wp_notify_postauthor( $comment_id, $deprecated );
$comment_id(int/WP_Comment) (required)
Comment ID or WP_Comment object.
$deprecated(string)
Not used
Default: null

Changelog

Since 1.0.0 Introduced.

Code of wp notify postauthor: wp-includes/pluggable.php WP 5.2.2

<?php
function wp_notify_postauthor( $comment_id, $deprecated = null ) {
	if ( null !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '3.8.0' );
	}

	$comment = get_comment( $comment_id );
	if ( empty( $comment ) || empty( $comment->comment_post_ID ) ) {
		return false;
	}

	$post   = get_post( $comment->comment_post_ID );
	$author = get_userdata( $post->post_author );

	// Who to notify? By default, just the post author, but others can be added.
	$emails = array();
	if ( $author ) {
		$emails[] = $author->user_email;
	}

	/**
	 * Filters the list of email addresses to receive a comment notification.
	 *
	 * By default, only post authors are notified of comments. This filter allows
	 * others to be added.
	 *
	 * @since 3.7.0
	 *
	 * @param array $emails     An array of email addresses to receive a comment notification.
	 * @param int   $comment_id The comment ID.
	 */
	$emails = apply_filters( 'comment_notification_recipients', $emails, $comment->comment_ID );
	$emails = array_filter( $emails );

	// If there are no addresses to send the comment to, bail.
	if ( ! count( $emails ) ) {
		return false;
	}

	// Facilitate unsetting below without knowing the keys.
	$emails = array_flip( $emails );

	/**
	 * Filters whether to notify comment authors of their comments on their own posts.
	 *
	 * By default, comment authors aren't notified of their comments on their own
	 * posts. This filter allows you to override that.
	 *
	 * @since 3.8.0
	 *
	 * @param bool $notify     Whether to notify the post author of their own comment.
	 *                         Default false.
	 * @param int  $comment_id The comment ID.
	 */
	$notify_author = apply_filters( 'comment_notification_notify_author', false, $comment->comment_ID );

	// The comment was left by the author
	if ( $author && ! $notify_author && $comment->user_id == $post->post_author ) {
		unset( $emails[ $author->user_email ] );
	}

	// The author moderated a comment on their own post
	if ( $author && ! $notify_author && $post->post_author == get_current_user_id() ) {
		unset( $emails[ $author->user_email ] );
	}

	// The post author is no longer a member of the blog
	if ( $author && ! $notify_author && ! user_can( $post->post_author, 'read_post', $post->ID ) ) {
		unset( $emails[ $author->user_email ] );
	}

	// If there's no email to send the comment to, bail, otherwise flip array back around for use below
	if ( ! count( $emails ) ) {
		return false;
	} else {
		$emails = array_flip( $emails );
	}

	$switched_locale = switch_to_locale( get_locale() );

	$comment_author_domain = @gethostbyaddr( $comment->comment_author_IP );

	// 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( __( 'New trackback on your post "%s"' ), $post->post_title ) . "\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";
			/* translators: %s: comment text */
			$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
			$notify_message .= __( 'You can see all trackbacks on this post here:' ) . "\r\n";
			/* translators: Trackback notification email subject. 1: Site title, 2: Post title */
			$subject = sprintf( __( '[%1$s] Trackback: "%2$s"' ), $blogname, $post->post_title );
			break;
		case 'pingback':
			/* translators: %s: post title */
			$notify_message = sprintf( __( 'New pingback on your post "%s"' ), $post->post_title ) . "\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";
			/* translators: %s: comment text */
			$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
			$notify_message .= __( 'You can see all pingbacks on this post here:' ) . "\r\n";
			/* translators: Pingback notification email subject. 1: Site title, 2: Post title */
			$subject = sprintf( __( '[%1$s] Pingback: "%2$s"' ), $blogname, $post->post_title );
			break;
		default: // Comments
			/* translators: %s: post title */
			$notify_message = sprintf( __( 'New comment on your post "%s"' ), $post->post_title ) . "\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";
			/* translators: %s: comment text */
			$notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
			$notify_message .= __( 'You can see all comments on this post here:' ) . "\r\n";
			/* translators: Comment notification email subject. 1: Site title, 2: Post title */
			$subject = sprintf( __( '[%1$s] Comment: "%2$s"' ), $blogname, $post->post_title );
			break;
	}
	$notify_message .= get_permalink( $comment->comment_post_ID ) . "#comments\r\n\r\n";
	$notify_message .= sprintf( __( 'Permalink: %s' ), get_comment_link( $comment ) ) . "\r\n";

	if ( user_can( $post->post_author, 'edit_comment', $comment->comment_ID ) ) {
		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->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->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->comment_ID}#wpbody-content" ) ) . "\r\n";
	}

	$wp_email = 'wordpress@' . preg_replace( '#^www\.#', '', strtolower( $_SERVER['SERVER_NAME'] ) );

	if ( '' == $comment->comment_author ) {
		$from = "From: \"$blogname\" <$wp_email>";
		if ( '' != $comment->comment_author_email ) {
			$reply_to = "Reply-To: $comment->comment_author_email";
		}
	} else {
		$from = "From: \"$comment->comment_author\" <$wp_email>";
		if ( '' != $comment->comment_author_email ) {
			$reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>";
		}
	}

	$message_headers = "$from\n"
	. 'Content-Type: text/plain; charset="' . get_option( 'blog_charset' ) . "\"\n";

	if ( isset( $reply_to ) ) {
		$message_headers .= $reply_to . "\n";
	}

	/**
	 * Filters the comment notification email text.
	 *
	 * @since 1.5.2
	 *
	 * @param string $notify_message The comment notification email text.
	 * @param int    $comment_id     Comment ID.
	 */
	$notify_message = apply_filters( 'comment_notification_text', $notify_message, $comment->comment_ID );

	/**
	 * Filters the comment notification email subject.
	 *
	 * @since 1.5.2
	 *
	 * @param string $subject    The comment notification email subject.
	 * @param int    $comment_id Comment ID.
	 */
	$subject = apply_filters( 'comment_notification_subject', $subject, $comment->comment_ID );

	/**
	 * Filters the comment notification email headers.
	 *
	 * @since 1.5.2
	 *
	 * @param string $message_headers Headers for the comment notification email.
	 * @param int    $comment_id      Comment ID.
	 */
	$message_headers = apply_filters( 'comment_notification_headers', $message_headers, $comment->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;
}

Related Functions

From tag: _notify (notifications)

More from category: Comments

No comments
    Hello, !     Log In . Register