函数文档

update_network_option_new_admin_email()

💡 云策文档标注

概述

update_network_option_new_admin_email() 函数用于在网络管理员邮箱地址变更尝试时发送确认请求邮件。新邮箱地址需经确认后才生效,确保变更安全。

关键要点

  • 函数在尝试更改网络管理员邮箱时触发,发送包含确认链接的邮件。
  • 参数包括旧邮箱地址 $old_value 和提议的新邮箱地址 $value,均为必需字符串。
  • 使用 md5 哈希和时间戳生成唯一确认链接,通过 update_site_option() 存储。
  • 邮件内容支持多语言,包含可替换的占位符如 ###USERNAME###、###ADMIN_URL### 等。
  • 提供过滤器 new_network_admin_email_content 允许自定义邮件文本。
  • 函数内部处理本地化切换、邮件发送及清理,确保流程完整。

代码示例

function update_network_option_new_admin_email( $old_value, $value ) {
    if ( get_site_option( 'admin_email' ) === $value || ! is_email( $value ) ) {
        return;
    }

    $hash            = md5( $value . time() . mt_rand() );
    $new_admin_email = array(
        'hash'     => $hash,
        'newemail' => $value,
    );
    update_site_option( 'network_admin_hash', $new_admin_email );

    $switched_locale = switch_to_user_locale( get_current_user_id() );

    $email_text = __( 'Howdy ###USERNAME###,

You recently requested to have the network admin email address on
your network changed.

If this is correct, please click on the following link to change it:
###ADMIN_URL###

You can safely ignore and delete this email if you do not want to
take this action.

This email has been sent to ###EMAIL###

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

    $content = apply_filters( 'new_network_admin_email_content', $email_text, $new_admin_email );

    $current_user = wp_get_current_user();
    $content      = str_replace( '###USERNAME###', $current_user->user_login, $content );
    $content      = str_replace( '###ADMIN_URL###', esc_url( network_admin_url( 'settings.php?network_admin_hash=' . $hash ) ), $content );
    $content      = str_replace( '###EMAIL###', $value, $content );
    $content      = str_replace( '###SITENAME###', wp_specialchars_decode( get_site_option( 'site_name' ), ENT_QUOTES ), $content );
    $content      = str_replace( '###SITEURL###', network_home_url(), $content );

    wp_mail(
        $value,
        sprintf(
            __( '[%s] Network Admin Email Change Request' ),
            wp_specialchars_decode( get_site_option( 'site_name' ), ENT_QUOTES )
        ),
        $content
    );

    if ( $switched_locale ) {
        restore_previous_locale();
    }
}

注意事项

  • 新邮箱地址必须通过 is_email() 验证,否则函数会提前返回。
  • 确认链接基于哈希生成,确保安全性和唯一性,避免重复或无效请求。
  • 邮件发送使用 wp_mail(),依赖 WordPress 邮件配置,需确保服务器支持。
  • 函数自 WordPress 4.9.0 版本引入,使用时需考虑版本兼容性。

📄 原文内容

Sends a confirmation request email when a change of network admin email address is attempted.

Description

The new network admin address will not become active until confirmed.

Parameters

$old_valuestringrequired
The old network admin email address.
$valuestringrequired
The proposed new network admin email address.

Source

function update_network_option_new_admin_email( $old_value, $value ) {
	if ( get_site_option( 'admin_email' ) === $value || ! is_email( $value ) ) {
		return;
	}

	$hash            = md5( $value . time() . mt_rand() );
	$new_admin_email = array(
		'hash'     => $hash,
		'newemail' => $value,
	);
	update_site_option( 'network_admin_hash', $new_admin_email );

	$switched_locale = switch_to_user_locale( get_current_user_id() );

	/* translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: those are placeholders. */
	$email_text = __(
		'Howdy ###USERNAME###,

You recently requested to have the network admin email address on
your network changed.

If this is correct, please click on the following link to change it:
###ADMIN_URL###

You can safely ignore and delete this email if you do not want to
take this action.

This email has been sent to ###EMAIL###

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

	/**
	 * Filters the text of the email sent when a change of network admin email address is attempted.
	 *
	 * The following strings have a special meaning and will get replaced dynamically:
	 *
	 *  - `###USERNAME###`  The current user's username.
	 *  - `###ADMIN_URL###` The link to click on to confirm the email change.
	 *  - `###EMAIL###`     The proposed new network admin email address.
	 *  - `###SITENAME###`  The name of the network.
	 *  - `###SITEURL###`   The URL to the network.
	 *
	 * @since 4.9.0
	 *
	 * @param string $email_text      Text in the email.
	 * @param array  $new_admin_email {
	 *     Data relating to the new network admin email address.
	 *
	 *     @type string $hash     The secure hash used in the confirmation link URL.
	 *     @type string $newemail The proposed new network admin email address.
	 * }
	 */
	$content = apply_filters( 'new_network_admin_email_content', $email_text, $new_admin_email );

	$current_user = wp_get_current_user();
	$content      = str_replace( '###USERNAME###', $current_user->user_login, $content );
	$content      = str_replace( '###ADMIN_URL###', esc_url( network_admin_url( 'settings.php?network_admin_hash=' . $hash ) ), $content );
	$content      = str_replace( '###EMAIL###', $value, $content );
	$content      = str_replace( '###SITENAME###', wp_specialchars_decode( get_site_option( 'site_name' ), ENT_QUOTES ), $content );
	$content      = str_replace( '###SITEURL###', network_home_url(), $content );

	wp_mail(
		$value,
		sprintf(
			/* translators: Email change notification email subject. %s: Network title. */
			__( '[%s] Network Admin Email Change Request' ),
			wp_specialchars_decode( get_site_option( 'site_name' ), ENT_QUOTES )
		),
		$content
	);

	if ( $switched_locale ) {
		restore_previous_locale();
	}
}

Hooks

apply_filters( ‘new_network_admin_email_content’, string $email_text, array $new_admin_email )

Filters the text of the email sent when a change of network admin email address is attempted.

Changelog

Version Description
4.9.0 Introduced.