web-dev-qa-db-ja.com

登録後にユーザーにアクティベーションメールを送信する

登録後すぐにすべてのユーザーに電子メールを送信したいのですが、電子メールアドレスを「有効にする」には、その電子メール内のリンクをクリックする必要があります。

理想的には、各ユーザーアカウントは、これが完了したかどうかを示すステータスを持ちます。

誰かが私がこれを達成するための方法をお勧めできますか?

1
Josh

アクティベーションプロセスのためにあなたは次のステップに従うことができます:

  1. ご覧のとおり、user_activation_keyテーブルのwp_users列。その列をユーザーアクティベーションリンクの送信に使用できます。
  2. ユーザー登録時に、カスタムSQLを使用して特定のコードをその列に挿入できます。ユーザーがwp_insert_user()でサインアップして$user_idにIDを返した後、カスタム挿入SQLを実行することができます。

        $user_id = wp_insert_user($user_detail);
    
        if ( $user_id && !is_wp_error( $user_id ) ) {
    
            $code = sha1( $user_id . time() );    
            global $wpdb;    
            $wpdb->update( 
                'wp_users', //table name     
                    array( 'user_activation_key' => $code,  // string    ),       
                    array( 'ID' =>    $user_id ),     
                    array( '%s',    // value1     )
                );
    
            $activation_link = add_query_arg( array( 'key' => $code, 'user' => $user_id ), get_permalink( /* your activation page id here*/ ));  
    
            wp_mail( $user_email, 'SUBJECT', 'Activation link : ' . $activation_link );
        }. 
    

    これにより、ユーザーにhttp://example.com/activation-page/?key=CERTAIN_KEY&user=USER_IDのようなアクティベーションリンクが電子メールに送信され、アクティベーションページで別の列user_statusを0から1に変更してユーザーをアクティブにするためのコードを実行できます。

  3. この後、user_status列の別の更新を実行することができます。

    global $wpdb;   
    
    $wpdb->update( 
        'wp_users', //table name     
         array( 'user_status' => 1, // integer   ),       
         array( 'ID' =>    $_GET['user'], //where clause
           'user_activation_key'=>$_GET['key'] //where clause
         ), 
         array( '%d', //value1    )
    );
    

あなたよりもステータス1を持つユーザーにサインインを許可することができます。

4
Alok Shrestha