web-dev-qa-db-ja.com

新規ユーザー登録メールをオフにする

新しいユーザーが登録したときに管理者が受け取るEメールをオフにしたいです。私たちは新しい登録のためにたくさんのEメールを受け取っています(それらは正当な登録です)が、私は誰かが何度も何度もサインアップしたことを私に告げるEメールを見たくありません。

これまでのところ私は プラグインをインストールしようとしました しかしそれらは動作しません。 (サポートは彼らがもはや働かないと言いさえします)。この辺りを検索したとき、私が見つけられた唯一の質問は 新しいユーザー登録のために管理者Eメールをオフにする 3年前のもので、どちらもうまくいかないようです。私はこのコードを試してみました:

// Redefine user notification function
if ( !function_exists('wp_new_user_notification') ) {
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);

    $message  = sprintf(__('New user registration on your blog %s:'), get_option('blogname')) . "rnrn";
    $message .= sprintf(__('Username: %s'), $user_login) . "rnrn";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "rn";


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

        if ( empty($plaintext_pass) )
            return;

        $message  = __('Hi there,') . "rnrn";
        $message .= sprintf(__("Welcome to %s! Here's how to log in:"), get_option('blogname')) . "rnrn";
        $message .= wp_login_url() . "rn";
        $message .= sprintf(__('Username: %s'), $user_login) . "rn";
        $message .= sprintf(__('Password: %s'), $plaintext_pass) . "rnrn";
        $message .= sprintf(__('If you have any problems, please contact me at %s.'), get_option('admin_email')) . "rnrn";
        $message .= __('Adios!');

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

    }
}

私のテーマのfunctions.php(これは@wp_mailの行がコメントアウトされています)に、そして私はwp-includes/pluggable.phpのその行をコメントアウトしようとさえしました、しかし私はまだ電子メールを受け取っています。

私は今WordPress 4.5.3を使っています。 (このプロセスの一環として4.6に更新)

私はできる限りはっきりさせようとしています。ユーザーに届く電子メールを停止させたくないのですが、どうすれば管理者への電子メールを停止させることができますか?

2
rudtek

WordPress <4.6に対する汎用プラガブルアプローチ(> 4.6については @ birgire's Answer を参照)

プラグイン可能な機能は、WordPressの過去の最も憂慮すべき遺物の1つであり、複雑さがたくさんあります。コアファイルを直接変更しても(コメントで@Jarmersonが言及したように完全にはお勧めできません)うまく動かなかったので、インストール内の別のプラグインがプラグ可能ファイルを上書きしている可能性があります。

wp-includes/pluggable.phpファイルはアクティブなプラグインとmu-pluginsの後、しかしアクティブなテーマの前にロードされます。これは、「プラグイン可能関数」がプラグイン内の宣言によってのみ置き換えられることを意味します。

あなたが他の答えで発見した修正はWordPressのずっと古いバージョンに適用されます。プラグイン可能な機能を置き換えるプロセスでは、 インストールされているバージョンに存在する元の機能 (この場合はv4.5.3)で始める必要があります。そうすることで、解決策は次のようになります(コメントは省略されました。行は追加されず、削除されるだけです)。

function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
  if ( $deprecated !== null )
    _deprecated_argument( __FUNCTION__, '4.3.1' );

  if ( 'admin' === $notify || ( empty( $deprecated ) && empty( $notify ) ) ) 
    return;

  global $wpdb, $wp_hasher;
  $user     = get_userdata( $user_id );
  $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  $key      = wp_generate_password( 20, false );

  do_action( 'retrieve_password_key', $user->user_login, $key );

  if ( empty( $wp_hasher ) ) {
    require_once ABSPATH . WPINC . '/class-phpass.php';
    $wp_hasher = new PasswordHash( 8, true );
  }

  $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
  $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );

  $message = sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
  $message .= __('To set your password, visit the following address:') . "\r\n\r\n";
  $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";
  $message .= wp_login_url() . "\r\n";

  wp_mail($user->user_email, sprintf(__('[%s] Your username and password info'), $blogname), $message);
}

この例では潜在的な重複宣言エラーが望ましいので伝統的なプラガブルな上書きをカプセル化するif( !function_exists() )チェックを省略しました - それはあなたの前に別のプラグインがwp_new_user_notification()関数を上書きしたことを示します。完全に無視されました。

私はこの関数を mu-plugin に入れることをお勧めします。他のプラグインがあなたを打ち負かす可能性を減らすためです。いかなる場合でも、コアファイルwp-includes/pluggable.phpを上記のように変更しないでください。

5
bosco

WordPress 4.6 +へのアプローチ

チケットのパッチを確認してください #36009 WordPressバージョン4.6にマージされました。

addswp_new_user_notification()'user'入力パラメーターの$notifyオプション。管理者へのメール送信をスキップします。

仕組み

register_new_user()関数には次の部分が含まれます。

do_action( 'register_new_user', $user_id );

電子メール通知は次のものでアクティブになります。

add_action( 'register_new_user', 'wp_send_new_user_notifications' );

ここで、コールバックは次のように定義されます:

function wp_send_new_user_notifications( $user_id, $notify = 'both' ) {
        wp_new_user_notification( $user_id, null, $notify );
}

回避策

したがって、このアプローチを試すことができます (未テスト) カスタムコールバックを使用して、デフォルトのコールバックを削除します。

add_action( 'init', function()
{
    remove_action( 'register_new_user',   'wp_send_new_user_notifications'         );
    add_action(    'register_new_user',   'wpse236122_send_new_user_notifications' );
} );

function wpse236122_send_new_user_notifications(  $user_id, $notify = 'user' )
{   
    wp_send_new_user_notifications( $user_id, $notify );    
}

デフォルトを'both'から'user'に変更します。

wp_send_new_user_notifications()もこれらのアクションにフックされていることに言及する価値があります。

  • network_site_new_created_user
  • network_site_users_created_user
  • network_user_new_created_user
  • edit_user_created_user

上記と同様の方法で対処できます。

4
birgire

いくつかの調査の結果、私はあなたがすべての通知メールを無効にできるが、管理者に送信するものは無効にできると判断しました。

あなたの最初の質問によると、私はWordPressのユーザー登録とパスワード再設定のEメールからの不要な通知Eメールを処理する方法についていくつかのアドバイスを提供できます。

あなたがあなたのインストールを実行しているcPanel環境があると仮定すると、単にこれらのステップに従うだけで、あなたは事実上それらの特定のEメールを削除するでしょう。

アクセス アカウントレベルのフィルタリング cPanel管理者から。この領域では、メインアカウントのフィルタを管理できます。 フィルタの作成 および 新しいフィルタの作成に進みます - / - 自分のアカウントのすべてのメール

Rule フィールドで、 To および equals を選択します。 注:他の条件用のフィルターを作成することもできます 。最後のフィールドは、作業中のEメールアドレスを入力するテキスト領域です。 rules の下には魔法が起こる場所があります。 メッセージを破棄 を選択します。他の選択肢もあります。

私はいつも使われていないことを知っている電子メールアドレスを作成し、それを使ってフィルタを作成しました。

私はWordPressのプラガブルフック​​などについて続けることができましたが、あなたが望むように正確に動作するものは何もありません。残念...

2
Jarmerson