将个人数据橡皮擦添加到插件

在WordPress 4.9.6中,添加了新的工具,以更容易遵守欧盟通用数据保护条例(简称GDPR)等法律。添加的工具包括个人数据删除工具,该工具支持删除/匿名给定用户的个人数据。它不会删除已注册的用户帐户–这仍然是管理员可以选择是否删除的单独步骤。

除了存储在WordPress评论中的个人数据外,插件还可以挂接到橡皮擦功能来擦除他们收集的个人数据,无论是在postmeta中还是在全新的自定义帖子类型(CPT)中。

与出口商一样,所有橡皮擦的“关键”是用户的电子邮件地址——之所以选择这个地址,是因为它支持删除正式注册用户和未注册用户(例如,注销的评论员)的个人数据。

然而,由于执行个人数据擦除是一个破坏性的过程,我们不想在没有确认请求的情况下就执行删除,所以管理员界面通过让管理员输入用户名或电子邮件地址来启动所有请求,然后发送一个链接,单击以确认他们的请求。一旦确认了请求,管理员可以为用户启动个人数据擦除,或者在需要时强制删除。

擦除个人数据导出的方式与个人数据导出的方式类似,并且依赖于挂接“擦除器”回调来完成擦除数据的肮脏工作。当管理员单击删除个人数据链接时,AJAX循环开始迭代系统中注册的所有橡皮擦,一次一个。除了内核中内置的橡皮擦外,插件还可以注册自己的橡皮刷回调。

橡皮擦回调接口设计得尽可能简单。橡皮擦回调接收我们正在处理的电子邮件地址以及页面参数。页面参数(从1开始)用于通过尝试一次性删除插件收集的所有个人数据来避免插件可能导致超时。一个表现良好的插件会限制每页试图删除的数据量(例如100篇帖子、200条评论等)

橡皮擦回调会回复是否删除了包含个人数据的项目、是否保留了包含个人信息的项目、要向管理员显示的消息数组(解释保留项目的原因)以及是否已完成。如果橡皮擦回调报告它没有完成,它将再次调用(在单独的请求中),页面参数增加1。

当所有导出器都被调用完成时,管理用户界面将更新,以显示是否删除了所有找到的个人数据,以及解释为什么保留个人数据的任何消息。

让我们研究一个假想的插件,它将注释位置数据添加到注释中。假设插件使用了添加注释元数据使用添加位置数据图元(_K)第个,共个纬度经度

插件需要做的第一件事是创建一个橡皮擦函数,该函数接受电子邮件地址和页面,例如:

/***从用户提供的电子邮件地址的注释元中删除所有存储的位置数据。**@param string$email_address要操作的电子邮件地址*@param int$页面分页**@return数组*/函数wporg_remove_location_meta_from_comments_for_email($email_address,$page=1){$number=500;//限制我们以避免超时$page=(int)$page;$comments=获取评论(阵列(“author_email”=>$email_address,“number”=>$number,“paged”=>$page,“order_by”=>“comment_ID”,“订单”=>“ASC”,));$items_removed=假;foreach((数组)$comments作为$comment){$latitude=get_comment_meta($comment->comment_ID,'latitude',true);$longitude=get_comment_meta($comment->comment_ID,'longitude',true);if(!空($latitude)){delete_comment_meta($comment->comment_ID,‘纬度’);$items_removed=true;}if(!empty($经度)){delete_comment_meta($comment->comment_ID,‘经度’);$items_removed=true;}}//告诉core我们是否还有更多评论要处理$done=计数($comments)<$number;返回数组(“items_removed”=>$items_emoved,“items_retained”=>false,//在本例中始终为false“messages”=>array(),//本例中没有消息“完成”=>$done,);}

插件需要做的下一件事是使用`wp_privacy_personal_data_erasers过滤橡皮擦数组来注册回调`
过滤器。

注册时,请为橡皮擦提供一个友好的名称(以帮助调试-此时此友好名称不会显示给任何人)
和回调,例如。

/***注册所有数据擦除器。**@param数组$exporters**@返回混合*/函数wporg_register_privacy_erasers($erasers){$erasers['my-plugin-slug']=数组(“eraser_friendly_name”=>__(“注释位置插件”,“文本域”),“回调”=>“wporg_remove_location_meta_from_comments_for_email”,);返回$erasers;}add_filter('wp_privacy_personal_data_erasers','wporg_register_privayce_erasers');

这就是它的全部!你的插件现在将清理其个人数据!