web-dev-qa-db-ja.com

プラグインを書くことでwp_mail()プラガブル関数をオーバーライドする必要がありますか?

Wp_password_change_notificationを上書きしたい場合、これを行うためのプラグインを書く必要がありますか?私のテーマのfunctions.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;
2
codecowboy

はい、プラグインを使用する必要があります。ポイントは、プラガブルは制御が難しいものと不可能なものの間にあるということです。 wp-hackersのこのスレッドを使用 実際の問題とその理由についてshould n'tを読むことができます。

重要:

注:pluggable.phpはbefore 'plugins_loaded'フックをロードします。

これは、「MU-plugins」(使用する必要がある)フックmu_plugins_loadedとそのフォルダーが必要であることを意味します。

私の推奨事項:

しないでください。小文字のメールのテキストを取得するだけの労力と問題はありません。 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 ) );
1
kaiser