###実現したいこと
WordPressで、「指定時間経過後にpending状態のユーザを削除する機能」を実装したいです。
###ユーザを登録するコード
以下、ユーザを登録するコードで、特に問題なく機能しています。
まず$name
と$mail
を受け取り、仮登録(pending)状態でユーザを登録します。
そしてwp_mail()
でパスワード設定メールのリンクを送信し、そのリンクから本登録が完了するという流れです。
この流れの最後で// 指定時間経過後にユーザを削除
するのがいいのではと思っていまして、その削除イベントを登録しているのがmy_pending_del_activation()
になります。
// Ajaxでユーザ登録します add_action( 'wp_ajax_nopriv_my_ajax_register', 'my_ajax_register' ); function my_ajax_register() { $name = isset( $_POST['name'] ) ? $_POST['name'] : ''; $mail = isset( $_POST['mail'] ) ? $_POST['mail'] : ''; $userdata = array( 'user_login' => $name, 'user_email' => $mail, 'user_pass' => 'toriaezu_pass' ); $user_id = wp_insert_user( $userdata ); // ユーザーの作成失敗 if ( is_wp_error( $user_id ) ) { } // 成功 else{ // パスワード設定メールを送信 $subject = '仮登録完了'; $html = '<a>ここ</a>をクリックしてパスワードを設定してください'; wp_mail( $mail, $subject, $html ); // 指定時間経過後にユーザを削除 my_pending_del_activation( $user_id, time() ); } }
###ユーザを削除するコード
次に肝心の削除の方です。
上のmy_pending_del_activation()
ですが、pendingが1日以上たったとき、そのユーザに対してwp_delete_user()
するイベントを登録する。という内容にすべきかと思っています。
そのイベントがmy_pending_del()
です。
そこで質問になりまして、削除対象の$user_id
はいったいどうやって渡せばいいのでしょうか?
my_pending_del_activation()
からmy_pending_del()
へいくにはmy_daily_event
を通さねばならず、そのときに$user_id
を渡す方法がわからない状況です。(というか、それができれば無事削除できるでしょうか?)
// イベントの登録 add_action( 'wp', 'my_pending_del_activation' ); function my_pending_del_activation( $user_id, $register_time ) { if( ! wp_next_scheduled( 'my_daily_event' ) ) { wp_schedule_event( $register_time , 'daily', 'my_daily_event' ) } } // 1日経過してもpendingのユーザを削除します add_action( 'my_daily_event', 'my_pending_del' ); function my_pending_del( $user_id ) { wp_delete_user( $user_id ); }
以上は素人ながらの実装方法なので、他の実装方法や注意点なども併せてご教授願えましたらと思い質問を立てさせて頂きました。
どなたかご協力宜しくお願い致します。
###補足
kei344様より削除関数など教えていただき、上記の「ユーザを削除するコード」を、下記のように変更しました。
後述の画像の通り、イベントの登録はできたように思えます。
// イベントの登録 wp_schedule_single_event( strtotime( '+60 min', time() ), 'my_pending_del_activation', array($user_id) ); // 1日経過してもpendingのユーザを削除します function my_pending_del( $user_id){ // ユーザ削除 require_once( ABSPATH.'wp-admin/includes/user.php' ); // TAMA...様のアドバイスにより require_once を追記 wp_delete_user( $user_id ); // ユーザ削除以外のイベントが実行されるかどうかテスト $report = $user_id.'を削除しました'; update_user_meta( '1', 'my_pending_del_report', $report ); } add_action('my_pending_del_activation','my_pending_del');
上のイベントの登録は次のとおり、「WP Crontrol」(イベント管理プラグイン)によって確認されます。
ですが、画像のようにイベントは登録できているはずなのに、実際にwp_delete_user()
やupdate_user_meta()
は発生しないという状況です。(サイトへのアクセスは発生しています。)
自力でこれ以上先に進むのが難しいのですが、ご助力願えませんでしょうか。