サポート » 使い方全般 » 一定期間ログインしていないユーザーのプロフィールを更新したい

  • 解決済 dadadada

    (@uedajirou2015)


    各ユーザーの最終ログイン日をチェックし、1年以上ログインしていなかったら、
    プロフィール情報を一部更新するという処理を定期的に行いたいと思っております。
    (管理者は除外したいです)

    下記のようにfunctions.phpに追加してみました。
    データベースを確認すると、最終ログイン日が”last_login”として
    記録されていることは確認できましたが、
    最終ログイン日が1年以上前のユーザーが存在していても
    特に何も変化がありません。(数日経過してます)

    //ユーザーの最終ログイン日を記録
    function user_last_login( $user_login, $user ) {
      update_user_meta( $user->ID, 'last_login', time() );
    }
    add_action( 'wp_login', 'user_last_login', 10, 2 );
    
    //定期的にログインしていないユーザーを更新
    function user_info_update_check() {
      if ( !wp_next_scheduled( 'user_info_update_event' ) ) {
        wp_schedule_event(time(), 'daily', 'user_info_update_event');
      }
    }
    add_action('wp', 'user_info_update_check');
    
    function user_info_update( $user_id ) {
      $user_info = get_userdata($user_id);
      $user_lastlogin_time = $user_info->last_login;
      $yearago = date("Y-m-d H:i:s",strtotime("-1 year"));
      $yearago_time = strtotime($yearago);
      if( $user_lastlogin_time < $yearago_time ) {
        if ( !current_user_can('administrator') ) {
          update_user_meta( $user_info->ID, 'first_name', 'ログインしてない' );
        }
      }
    }
    add_action('user_info_update_event', 'user_info_update');

    functions.phpに追加したコードが間違っているのだと思いますが、
    エラーも出ていないのでどこから手をつけて良いのかわからず悩んでおります。

    どうかお力添えいただけると幸いです。
    よろしくお願いいたします。

    • このトピックはdadadadaが3年、 1ヶ月前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    user_info_update_event フックに引数($user_id)はありません。

    例:

    function user_info_update() {
    	$user_query = new WP_User_Query( array( 'role__not_in' => 'Administrator' ) );
    	if ( ! empty( $user_query->results ) ) {
    		foreach ( $user_query->results as $user ) {
    			(省略)
    		}
    	}
    }
    スレッド開始 dadadada

    (@uedajirou2015)

    ishitaka様
    ご回答ありがとうございます。

    根本的に勘違いしておりました。
    ご回答いただいた内容を参考に実装できました。
    感謝いたします!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「一定期間ログインしていないユーザーのプロフィールを更新したい」には新たに返信することはできません。