ヘッダーのロゴ

すぐに仕事で使えるIT技術情報メディア

WordPressで特定のカスタムフィールドの値以外の値を持つユーザー情報を一括削除する方法

投稿日:2024年04月08日(月) 更新日:2024年04月14日(日)
WordPressで特定のカスタムフィールドの値以外の値を持つユーザー情報を一括削除する方法|WordPress MAGAZINE ワードプレスマガジン|すぐに仕事で使えるIT技術情報メディア

みなさんこんにちは!エンジニアの高澤です!

今回はWordPressで特定のカスタムフィールドの値以外の値を持つユーザー情報を一括削除する方法について解説していきたいと思います。

かなりマニアックなテクニックシリーズになりますが、当記事の内容は例えばWordPressで構築した会員登録サイトにおいて登録された特定のユーザー情報を一括で自動削除したい場合に大変活躍できる内容になるかなと思います。

よろしければぜひ繰り返しお仕事などで当記事をご活用いただけましたら幸いです。

特定のカスタムフィールドの値以外の値を持つユーザー情報を一括削除する方法

それでは早速、特定のカスタムフィールドの値以外の値を持つユーザー情報を一括削除する方法について解説していきたいと思います。

事前に必ずバックアップをとる

実装する前にまずは必ずバックアップをとってください。

これをしなければ万が一のことがった場合にこちらで責任が取れませんので、必ず行っていただければと思います。

バックアップの取り方はご自身のWordPressに適した形でとっていただければと思うのですが、筆者のおすすめは「All in One WP Migration」プラグインです。

インストールは、WordPress管理画面左メニューの「プラグイン」→「新規プラグインを追加」を開きます。

新規追加画面の右上にあるプラグイン検索ボックスに「All in One WP Migration」と入力します。

入力していただくと、検索結果に「All in One WP Migration」プラグインが表示されるかと思いますので、「今すぐインストール」ボタンをクリックします。

「有効化」をクリックしていただけますとAll in One WP Migrationプラグインのセットアップが完了です。

これでAll in One WP Migrationプラグインの機能は使えるようになりました。

バックアップはWordPress管理画面左メニュー「All in One WP Migration」→エクスポート→エクスポート先→ファイル、の手順で可能です。

ダウンロードが開始されたらデスクトップにバックアップデータが保存されるので、必ず保管しておき万が一のことがあったらすぐに戻せるようにしてください。

こちらが完了したら処理の実装に進みます。

処理の実装コードをfunctions.phpに記述する

バックアップのセットアップが完了しいつでも戻せる状態になったら、処理の実装コードを記述していきましょう。

以下のコードは処理コードのテンプレートになります。

ご自身のWordPressに適した形でカスタマイズをしてください。

以下のコードをfunctions.phpにコピー&ペーストしてください。

// functions.php ファイルに以下のコードを追加します

// ヘッダーが読み込まれた後に実行されるアクションフックを定義
function my_custom_header_action() {
  global $wpdb;

  $excluded_values = array('sample_custom_fields1','sample_custom_fields2','sample_custom_fields3','sample_custom_fields4','sample_custom_fields5');

  $args = array(
      'meta_query' => array(
          'relation' => 'AND',
          array(
              'key' => 'sample_custom_fields_key', // カスタムフィールドのキー
              'value' => $excluded_values,
              'compare' => 'NOT IN', // 指定した値に含まれないユーザーを取得
          ),
      ),
      'fields' => 'ID',
      'number' => -1, // 取得するユーザーの数
  );
  
  $user_query = new WP_User_Query($args);
  
  if (!empty($user_query->results)) {
      $user_query_num = 0;
      foreach ($user_query->results as $user_id) {
          // ユーザーのカスタムフィールドの値を取得
          $sample_custom_fields_key = get_user_meta($user_id, 'sample_custom_fields_key', true);
          
          // 正規表現パターンに一致する場合のみ処理を実行
          if (preg_match('/[a-zA-Z0-9]{4,}/', $sample_custom_fields_key)) {
              // ユーザーに関連するメタデータの削除
              $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id = %d", $user_id ) );
              // ユーザー本体の情報を削除
              $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->users WHERE ID = %d", $user_id ) );
          }
      }
  }
}
// ヘッダーが読み込まれた後に my_custom_header_action 関数を実行するアクションフックを設定
add_action('wp_loaded', 'my_custom_header_action');

ペースト後に保存していただき、管理画面を更新したら処理が実行されます。

無事条件による特定のユーザー情報が一括削除されていれば成功です。

お疲れ様でした!

まとめ

特定のカスタムフィールドの値以外の値を持つユーザー情報を一括削除する方法についての解説は以上になります。

ニッチな内容にはなりますが、当記事の知識があれば今後お仕事でユーザー情報の条件下での一括削除対応が可能となりますので、実務レベルで活用できる内容になるかと思います。

よろしければぜひご活用いただけましたら幸いです。

執筆者

ワードプレスマガジン編集部 高澤 翔汰

歴4年目(2024年8月以降から5年目です)のエンジニアです!
CMSでのサイト構築とWebデザイン制作を兼任して4年目になります。
自作のiOSアプリ(iPhoneアプリ)やWordPressプラグインを開発することもあり、まだまだ現在進行形で勉強中です!