在插件卸载过程中删除用户元数据的最佳实践方法?

时间:2012-08-03 作者:Matthew Hui

如果插件将数据存储在usermeta表中,那么为卸载中的所有用户删除这些条目的最佳做法是什么。php?我可以直接访问数据库,但还有其他方法吗?

4 个回复
SO网友:J.D.

如果可能的话,您不应该直接访问数据库。这主要有两个原因:

如果数据库结构发生更改(不太可能),您的查询可能会过时。使用以下函数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 );
您可以对插件使用的每个元键重复该操作。

SO网友:figureone

最好不要直接与数据库交互,尤其是在发出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

SO网友:bgallagh3r

最佳实践是为插件输入的元数据添加前缀,这样您就可以简单地搜索所有meta\\u键

$wpdb->query( 
    $wpdb->prepare( 
        "
        DELETE FROM $wpdb->usermeta
        WHERE meta_key LIKE `_prefix_%`
        "
        )
);

SO网友:Manish

您不应直接访问DBhttp://codex.wordpress.org/Function_Reference/register_deactivation_hook示例代码:

register_uninstall_hook( __FILE__, \'plugin_uninstall\' );

function plugin_uninstall () {
    //usermeta data delete code
}

结束

相关推荐

Beta Versioning of Plugins

当我为一些bug编写修复程序时,我通常会增加版本并将其发送给bug查找程序,以查看我的修复程序是否有效。如果我有1.2.5 我想创建一个测试版,一旦我提交代码,它将变得多余,我应该使用1.2.5-beta 或1.2.6-beta? 我担心的是1.2.6 <;1.2.6-beta 因此,字符串比较可能有利于beta版,而bug查找程序不会收到发布稳定版本的通知。编辑:如果在不考虑发布类型的情况下对字符串进行绝对比较,则可以使用1.2.5-fix 然后1.2.6. 该问题也概述在http://en.wik