web-dev-qa-db-ja.com

会員登録、登録がなくなったときのユーザロールの変更

そこにはたくさんのメンバーシッププラグインがあります。それらはすべて、ユーザーが選択した購読に基づいてサイトコンテンツを制限することに焦点を当てています。

ただし、購読時間が終了したときにユーザーの役割を「支払い済み」から「支払い済み」に変更するだけで、すべてのサイトコンテンツを表示できるようになりますが、以前に設定した役割の機能に限定されます。 。

EDIT(わかりやすくするため):私のユーザーは自分と自分のサービスを公開する公開プロフィールページを持っています。彼らは公にするために毎年支払います、しかし、彼らが支払いをしていないならば、彼らはサイトから隠されるべきです、すなわち、役割を「公に」の代わりに「見えない」に変えてください。今日、私は手動で各ユーザーの日付を保存し、必要に応じて役割を変更することでこれを行いますが、これは非常に面倒です。

1
talven

おそらく有効期限データをどこかに保存したので、毎日実行するようにwp_cronジョブを設定します。その仕事は有効期限をチェックし、日付が過ぎているユーザーのための役割を変更する必要があります。

if ( ! wp_next_scheduled( 'alter_user_role_hook' ) ) {
  wp_schedule_event( strtotime('tomorrow'), 'daily', 'alter_user_role_hook' );
}
function alter_user_role_function() {
  global $wpdb;
  $today = date('Y-m-d H:i:s',strtotime('today'));
  $expired = $wdpb->get_col("SELECT user_id FROM {$wpdb->usermeta} WHERE expired_key < {$today}");
  if (!empty($expired)) {
    foreach ($expired as $uid) {
      wp_update_user( 
        array ( 
          'ID' => $uid, 
          'role' => 'havent_paid'
        ) 
      );
    }
  }
}
add_action( 'alter_user_role_hook', 'alter_user_role_function' );

有効期限はユーザーmetaに格納されており、ロールスラッグを推測しています。

テストされていませんが、それは近いはずです。サイトのトラフィックが少ない時間帯に実行されるように時間コンポーネントを変更します。

1
s_ha_dum