函数文档

wp_site_admin_email_change_notification()

💡 云策文档标注

概述

wp_site_admin_email_change_notification() 是一个 WordPress 函数,用于在站点管理员邮箱地址变更时,向旧邮箱地址发送通知邮件。该函数包含参数验证、过滤器钩子和邮件内容构建逻辑。

关键要点

  • 函数接受三个必需参数:$old_email(旧邮箱地址)、$new_email(新邮箱地址)和 $option_name(相关数据库选项名)。
  • 通过 send_site_admin_email_change_email 过滤器控制是否发送邮件,默认在旧邮箱为空或为默认值时跳过。
  • 邮件内容使用占位符(如 ###OLD_EMAIL###、###NEW_EMAIL###)动态替换,并通过 site_admin_email_change_email 过滤器允许自定义。
  • 最终使用 wp_mail() 发送邮件,主题包含站点名称。

代码示例

function wp_site_admin_email_change_notification( $old_email, $new_email, $option_name ) {
    $send = true;
    if ( empty( $old_email ) || 'you@example.com' === $old_email ) {
        $send = false;
    }
    $send = apply_filters( 'send_site_admin_email_change_email', $send, $old_email, $new_email );
    if ( ! $send ) {
        return;
    }
    $email_change_text = __( 'Hi,

This notice confirms that the admin email address was changed on ###SITENAME###.

The new admin email address is ###NEW_EMAIL###.

This email has been sent to ###OLD_EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###' );
    $email_change_email = array(
        'to'      => $old_email,
        'subject' => __( '[%s] Admin Email Changed' ),
        'message' => $email_change_text,
        'headers' => '',
    );
    $site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
    $email_change_email = apply_filters( 'site_admin_email_change_email', $email_change_email, $old_email, $new_email );
    $email_change_email['message'] = str_replace( '###OLD_EMAIL###', $old_email, $email_change_email['message'] );
    $email_change_email['message'] = str_replace( '###NEW_EMAIL###', $new_email, $email_change_email['message'] );
    $email_change_email['message'] = str_replace( '###SITENAME###', $site_name, $email_change_email['message'] );
    $email_change_email['message'] = str_replace( '###SITEURL###', home_url(), $email_change_email['message'] );
    wp_mail(
        $email_change_email['to'],
        sprintf( $email_change_email['subject'], $site_name ),
        $email_change_email['message'],
        $email_change_email['headers']
    );
}

注意事项

  • 函数在 WordPress 4.9.0 版本引入,使用时需确保版本兼容性。
  • 邮件内容中的占位符(如 ###SITENAME###)会自动替换为实际值,开发者可通过过滤器自定义邮件格式。
  • 相关函数包括 wp_mail()、get_option() 和 apply_filters(),用于邮件发送、选项获取和钩子处理。

📄 原文内容

Sends an email to the old site admin email address when the site admin email address changes.

Parameters

$old_emailstringrequired
The old site admin email address.
$new_emailstringrequired
The new site admin email address.
$option_namestringrequired
The relevant database option name.

Source

function wp_site_admin_email_change_notification( $old_email, $new_email, $option_name ) {
	$send = true;

	// Don't send the notification for an empty email address or the default 'admin_email' value.
	if ( empty( $old_email ) || 'you@example.com' === $old_email ) {
		$send = false;
	}

	/**
	 * Filters whether to send the site admin email change notification email.
	 *
	 * @since 4.9.0
	 *
	 * @param bool   $send      Whether to send the email notification.
	 * @param string $old_email The old site admin email address.
	 * @param string $new_email The new site admin email address.
	 */
	$send = apply_filters( 'send_site_admin_email_change_email', $send, $old_email, $new_email );

	if ( ! $send ) {
		return;
	}

	/* translators: Do not translate OLD_EMAIL, NEW_EMAIL, SITENAME, SITEURL: those are placeholders. */
	$email_change_text = __(
		'Hi,

This notice confirms that the admin email address was changed on ###SITENAME###.

The new admin email address is ###NEW_EMAIL###.

This email has been sent to ###OLD_EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###'
	);

	$email_change_email = array(
		'to'      => $old_email,
		/* translators: Site admin email change notification email subject. %s: Site title. */
		'subject' => __( '[%s] Admin Email Changed' ),
		'message' => $email_change_text,
		'headers' => '',
	);

	// Get site name.
	$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );

	/**
	 * Filters the contents of the email notification sent when the site admin email address is changed.
	 *
	 * @since 4.9.0
	 *
	 * @param array $email_change_email {
	 *     Used to build wp_mail().
	 *
	 *     @type string $to      The intended recipient.
	 *     @type string $subject The subject of the email.
	 *     @type string $message The content of the email.
	 *         The following strings have a special meaning and will get replaced dynamically:
	 *          - `###OLD_EMAIL###` The old site admin email address.
	 *          - `###NEW_EMAIL###` The new site admin email address.
	 *          - `###SITENAME###`  The name of the site.
	 *          - `###SITEURL###`   The URL to the site.
	 *     @type string $headers Headers.
	 * }
	 * @param string $old_email The old site admin email address.
	 * @param string $new_email The new site admin email address.
	 */
	$email_change_email = apply_filters( 'site_admin_email_change_email', $email_change_email, $old_email, $new_email );

	$email_change_email['message'] = str_replace( '###OLD_EMAIL###', $old_email, $email_change_email['message'] );
	$email_change_email['message'] = str_replace( '###NEW_EMAIL###', $new_email, $email_change_email['message'] );
	$email_change_email['message'] = str_replace( '###SITENAME###', $site_name, $email_change_email['message'] );
	$email_change_email['message'] = str_replace( '###SITEURL###', home_url(), $email_change_email['message'] );

	wp_mail(
		$email_change_email['to'],
		sprintf(
			$email_change_email['subject'],
			$site_name
		),
		$email_change_email['message'],
		$email_change_email['headers']
	);
}

Hooks

apply_filters( ‘send_site_admin_email_change_email’, bool $send, string $old_email, string $new_email )

Filters whether to send the site admin email change notification email.

apply_filters( ‘site_admin_email_change_email’, array $email_change_email, string $old_email, string $new_email )

Filters the contents of the email notification sent when the site admin email address is changed.

Changelog

Version Description
4.9.0 Introduced.