web-dev-qa-db-ja.com

新規ユーザー登録の管理者メールをオフにする

新しいユーザーが登録されたときにユーザーと管理者への電子メール通知をオフにするにはどうすればよいですか?

私はいくつかの提案やプラグインを見ましたが、どれもうまくいくようには見えません。 1つはプラグインの1つから機能を奪うことでした:

if ( !function_exists('wp_new_user_notification') ) :
/**
 * Notify the blog admin of a new user, normally via email.
 *
 * @since 2.0
 *
 * @param int $user_id User ID
 * @param string $plaintext_pass Optional. The user's plaintext password
 */
function wp_new_user_notification($user_id, $plaintext_pass = '') {
    $user = new WP_User($user_id);

    $user_login = stripslashes($user->user_login);
    $user_email = stripslashes($user->user_email);

    // 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);

    $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
    $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

    @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);

    if ( empty($plaintext_pass) )
        return;

    $message  = sprintf(__('Username: %s'), $user_login) . "\r\n";
    $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
    $message .= wp_login_url() . "\r\n";

    // wp_mail($user_email, sprintf(__('[%s] Your username and password'), $blogname), $message)

}
endif;

質問や提案はかなり古かったので、おそらくWP 3.5で何かを乗り越えようとしません。

申し込み時に、まだ管理者のメールアドレスとユーザーへのメールアドレスを受け取っています。

パスワードを忘れた場合のEメールはブロックしたくありません。

3
Rob

関数wp_new_user_notificationはプラガブルです。それはあなたがあなたのプラグイン/テーマの中でこの関数のあなたのバージョンを宣言することによってそれをオーバーライドできることを意味します。

したがって、すべての通知を完全に無効にしたい場合は、次のようにしてください。

if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
    return;
}
endif;

ただし、すべての通知を無効にすることはお勧めできません。少なくともユーザーに通知を送信することをお勧めします(ユーザーは自分のパスワードをどのように見つけますか?)。だからこの場合あなたのコードは次のようになります。

if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
    $user = get_userdata( $user_id );

    $user_login = stripslashes($user->user_login);
    $user_email = stripslashes($user->user_email);

    $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

    if ( empty($plaintext_pass) ) {
        return;
    }

    $message  = sprintf(__('Username: %s'), $user_login) . "\r\n";
    $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
    $message .= wp_login_url() . "\r\n";

    wp_mail($user_email, sprintf(__('[%s] Your username and password'), $blogname), $message);
}
endif;
9
Eugene Manuilov

今日これをやらなければならず、これらの解決策の多くはかなり時代遅れに見えます。これは、プラグイン可能な関数を上書きすることなく、より良い方法であるように見えます。これは私の正確なコードではありませんが、参考になるはずです。

add_action( 'register_post', 'maybe_stop_notifications', 10, 3 ); 

function maybe_stop_notifications ( $sanitized_user_login, $user_email, $errors ) { 

  if( empty( $errors->get_error_code() )) { 

       remove_action( 'register_new_user', 'wp_send_new_user_notifications' );

  }
} 
2
user119030

このページ によると、(すべての通知を完全に無効にするには)このコードを使用するだけで十分です。

if ( !function_exists('wp_new_user_notification') ) {    
  function wp_new_user_notification( ) {}    
}

それは与えられた答えにかなり近いが、少し短い。私はこれを価値のあるものとして共有することを考えました。

1
cptstarling

4.6以降、管理通知を無効にするパラメータがあります。 https://developer.wordpress.org/reference/functions/wp_new_user_notification/ /

  • @since 4.6.0 $notifyパラメータは、作成したユーザーにのみ通知を送信するための 'user'を受け入れます。
  • @param string $ notifyオプションです。発生するはずの通知の種類。 'admin'または空の文字列(adminのみ)、 'user'、または 'both'(adminとuser)を受け入れます。デフォルトは空です。 * /
  • 関数wp_new_user_notification($ user_id、$ deprecated = null、$ notify = 'user')
0
McPace