我必须用编写插件来覆盖wp_mail()可插拔函数吗?

时间:2011-10-24 作者:codecowboy

如果我想覆盖wp\\u password\\u change\\u通知,我是否必须编写插件才能做到这一点?它似乎对功能没有影响。我的主题的php。

我唯一需要做的就是把措辞改成小写。

    if ( !function_exists(\'wp_password_change_notification\') ) :
    /**
     * Notify the blog admin of a user changing password, normally via email.
     *
     * @since 2.7
     *
     * @param object $user User Object
     */
    function wp_password_change_notification(&$user) {
        // send a copy of password change notification to the admin
        // but check to see if it\'s the admin whose password we\'re changing, and skip this
        if ( $user->user_email != get_option(\'admin_email\') ) {
            $message = sprintf(__(\'Password lost and changed for user: %s\'), $user->user_login) . "\\r\\n";
            // 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);
            wp_mail(get_option(\'admin_email\'), sprintf(__(\'[%s] Password Lost/Changed\'), $blogname), $message);
        }
    }

endif;

1 个回复
SO网友:kaiser

是的,你需要使用插件。问题是,可插拔性介于难以控制和不可能控制之间。你可以阅读through this thread on wp-hackers 关于实际问题以及为什么不应该使用它们。

Important:

注:可插拔。php在“plugins\\u-loaded”挂钩之前加载。

这意味着您需要“MU插件”(必须使用)挂钩:mu_plugins_loaded 和他们的文件夹。

My recommendation:

不要这样做。仅仅为了获得小写的电子邮件文本,就不值得为此付出努力和遇到问题。直接连接到wp_mail() 筛选器和操作:

// Compact the input, apply the filters, and extract them back out
extract( apply_filters( \'wp_mail\', compact( \'to\', \'subject\', \'message\', \'headers\', \'attachments\' ) ) );

// Plugin authors can override the potentially troublesome default
$phpmailer->From     = apply_filters( \'wp_mail_from\'     , $from_email );
$phpmailer->FromName = apply_filters( \'wp_mail_from_name\', $from_name  );

$content_type = apply_filters( \'wp_mail_content_type\', $content_type );

// Set the content-type and charset
$phpmailer->CharSet = apply_filters( \'wp_mail_charset\', $charset );

do_action_ref_array( \'phpmailer_init\', array( &$phpmailer ) );

结束

相关推荐