如果插件将数据存储在usermeta表中,那么为卸载中的所有用户删除这些条目的最佳做法是什么。php?我可以直接访问数据库,但还有其他方法吗?
在插件卸载过程中删除用户元数据的最佳实践方法?
如果可能的话,您不应该直接访问数据库。这主要有两个原因:
如果数据库结构发生更改(不太可能),您的查询可能会过时。使用以下函数delete_user_meta()
将确保您的查询对于所有支持该功能的WordPress版本(过去、现在和将来)都能正常工作。
缓存。如果删除数据后不清理缓存,可能会导致问题。如果手动删除数据,还需要手动清理缓存。使用自动执行此操作的内置函数绝对是一个更好的主意。
要删除元数据(如用户元字段),我建议使用delete_metadata()
作用此函数有第五个参数,您可以将其设置为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 );
您可以对插件使用的每个元键重复该操作。最好不要直接与数据库交互,尤其是在发出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
最佳实践是为插件输入的元数据添加前缀,这样您就可以简单地搜索所有meta\\u键
$wpdb->query(
$wpdb->prepare(
"
DELETE FROM $wpdb->usermeta
WHERE meta_key LIKE `_prefix_%`
"
)
);
您不应直接访问DBhttp://codex.wordpress.org/Function_Reference/register_deactivation_hook示例代码:
register_uninstall_hook( __FILE__, \'plugin_uninstall\' );
function plugin_uninstall () {
//usermeta data delete code
}