プラグインがusermetaテーブルにデータを格納する場合、uninstall.phpのすべてのユーザーに対してこれらのエントリを削除するための最善の方法は何ですか?データベースに直接アクセスできますが、別の方法はありますか?
可能であれば、データベースに直接アクセスしないでください。これには主に2つの理由があります。
データベース構造が変更された場合(ほとんどありません)、クエリが古くなっている可能性があります。 delete_user_meta()
のような関数を使うことはあなたの問い合わせがその関数をサポートするすべてのWordPressバージョン(過去、現在、そして未来)のためにきちんと働くべきであることを保証するでしょう。
キャッシング。データを削除した後にキャッシュをクリーンアップしないと、問題が発生する可能性があります。データを手動で削除した場合は、キャッシュも手動でクリーンアップする必要があります。自動的にこれを行う組み込み関数を使用することは間違いなくより良い考えです。
メタデータ(ユーザーのメタフィールドなど)を削除するには、 delete_metadata()
関数を使用することをお勧めします。この関数には5番目のパラメータがあり、これをtrue
に設定すると、すべてのオブジェクト(この場合はユーザー)に対して指定されたmeta_key
を持つメタデータを削除できます。例:
$meta_type = 'user';
$user_id = 0; // This will be ignored, since we are deleting for all users.
$meta_key = 'your_meta_key';
$meta_value = ''; // Also ignored. The meta will be deleted regardless of value.
$delete_all = true;
delete_metadata( $meta_type, $user_id, $meta_key, $meta_value, $delete_all );
あなたのプラグインが使う各メタキーについてそれを繰り返すことができます。
ベストプラクティスは、あなたのプラグインが入力したメタデータに接頭辞を付けることです。こうすることで、すべてのmeta_keyを検索するような単純なことができます。
$wpdb->query(
$wpdb->prepare(
"
DELETE FROM $wpdb->usermeta
WHERE meta_key LIKE `_prefix_%`
"
)
);
特にDELETEステートメントを発行するときは、データベースと直接対話しないことが最善です。単一のタイプミスによって意図しないデータが破壊される可能性があるからです。代わりに、WordPressの機能を使用してすべてのユーザーIDのリストを取得してから、次のように各ユーザーのユーザーメタフィールドを個別に削除します。
$all_user_ids = get_users( 'fields=ID' );
foreach ( $all_user_ids as $user_id ) {
delete_user_meta( $user_id, 'your_meta_key_to_delete' );
}
機能リファレンス
http://codex.wordpress.org/Function_Reference/get_usershttp://codex.wordpress.org/ Function_Reference/delete_user_meta
サンプルコード
register_uninstall_hook( __FILE__, 'plugin_uninstall' );
function plugin_uninstall () {
//usermeta data delete code
}