サポート » 使い方全般 » DBのwp_usermetaをクエリで操作(削除)

  • DBの任意のフィールドをクエリで操作する件ですが、

    1:

    $wpdb->query( "DELETE FROM {$wpdb->users}
    WHERE user_login not in ('admin') ”)

    とすると、管理者を除く全ユーザーを一括削除できるのに対して、

    2:
    `$wpdb->query( “DELETE FROM {$wpdb->usermeta}
    WHERE user_id not in (‘1’)`

    としてもまったく削除されず変化がありません(myphpadminでテーブルを確認しました)

    なぜこれを削除したいかと申しますと(仮に登録ユーザーが購読者20名いたとして)
    上記1で管理者を除く全ユーザーのwp_usersを削除しても
    wp_usermetaのほうにそれらの削除済みユーザーのmeta情報が残っているままなので、

    管理画面で「ユーザーの一覧」ページをみると
    タイトル下の総数(count)のところが
    すべて(21名)管理者(1名)購読者(20名)
    となったままなのです。一覧表には管理者しかいないので、ここを
    すべて(1名)管理者(1名)
    としたいのですが、それにはwp_usermetaのuser_idを削除したらよいのか?と思いました。

    基本的なことかと思い恐縮ですが、

    クエリでwp_usermetaの削除操作ができるのかという点と、
    管理画面「ユーザーの一覧」ページの総数が実際の一覧に表示される人数と一致したい点を
    ご指導いただけないでしょうか。
    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    user_id は数値型なので、クォートは不要です。

    ユーザー数の表示は、usermeta テーブルから取得しているようなので、お考えのように usermeta テーブルの整合させれば、ユーザー数も直るはずです。

    ちなみに、ユーザーの削除や記事の削除などについても、DBで直接削除することは、よく構造を理解していないと、一部キャッシュデータが残って整合性がとれなくなったりするので、極力、WordPress の関数を用いて削除処理を行ったほうが安全です。

    トピック投稿者 emigre329

    (@emigre329)

    jim912様

    ありがとうございました。返信にお時間がかかってしまい申し訳ありません。
    いただいたアドバイスに従い、関数で処理してご報告を。と思って取り組みましたが
    むずかしいことをしているのか、方法を知らないだけなのか、
    時間だけが過ぎてしまいました。

    特定のユーザー(今回は管理者)を除く全ユーザーを削除

    という条件なので、イメージとしては

    特定のユーザーのuser_idを取得して
    $nodeleteInfo = get_user_by( ‘login’, ‘admin’ );
    $nodeleteID = $nodeleteInfo->ID;

    テーブルwp_usermetaの全ユーザをforeach文で回し、
    wp_delete_user( $id, $nodeleteID );
    ただし$nodeleteIDの場合スキップ
    という感じじゃないかと思うのですが。。

    $wpdb->postsのpost_authorに他のユーザIDが入っていないのであれば、こんなのはどうでしょうか?

    MySQLはDELETEに複数テーブルを指定できるので、

    $wpdb->query("DELETE wp_users, wp_usermeta FROM wp_users, wp_usermeta WHERE wp_users.ID=wp_usermeta.user_id AND wp_users.user_login NOT IN ('admin'));

    ということができます。ループなしで、一気に削除です。

    トピック投稿者 emigre329

    (@emigre329)

    kjmtsh様
    たいへん参考になりました。ありがとうございます。

    $wpdb->queryの場合はこれでバッチリですね!
    jim912様のアドバイスに従い、クエリを使わずに実現したいと奮闘していましたが
    完成にいたらず、書き込みが遅くなってすみませんでした。
    今後ともなにかお気づきのことがありましたらその際はよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「DBのwp_usermetaをクエリで操作(削除)」には新たに返信することはできません。