@@ -4165,6 +4165,101 @@ static function ( $item ) use ( $reserved_names ) {
41654165 );
41664166}
41674167
4168+ /**
4169+ * Registers the personal data eraser for users.
4170+ *
4171+ * @since 6.7.0
4172+ *
4173+ * @param array $erasers An array of personal data erasers.
4174+ * @return array An array of personal data erasers.
4175+ */
4176+ function wp_register_user_personal_data_eraser ( $ erasers ) {
4177+ $ erasers ['wordpress-user ' ] = array (
4178+ 'eraser_friendly_name ' => __ ( 'WordPress User ' ),
4179+ 'callback ' => 'wp_user_personal_data_eraser ' ,
4180+ );
4181+
4182+ return $ erasers ;
4183+ }
4184+
4185+ /**
4186+ * Erases core user profile data for a personal data erasure request.
4187+ *
4188+ * @since 6.7.0
4189+ *
4190+ * @param string $email_address The user's email address.
4191+ * @param int $page Unused. Part of the eraser signature.
4192+ * @return array {
4193+ * Data removal results.
4194+ *
4195+ * @type bool $items_removed Whether items were actually removed.
4196+ * @type bool $items_retained Whether items were retained.
4197+ * @type string[] $messages An array of messages about retained items.
4198+ * @type bool $done Whether the eraser is finished.
4199+ * }
4200+ */
4201+ function wp_user_personal_data_eraser ( $ email_address , $ page = 1 ) {
4202+ $ response = array (
4203+ 'items_removed ' => false ,
4204+ 'items_retained ' => false ,
4205+ 'messages ' => array (),
4206+ 'done ' => true ,
4207+ );
4208+
4209+ $ email_address = trim ( $ email_address );
4210+
4211+ if ( empty ( $ email_address ) ) {
4212+ return $ response ;
4213+ }
4214+
4215+ $ user = get_user_by ( 'email ' , $ email_address );
4216+
4217+ if ( ! $ user instanceof WP_User ) {
4218+ return $ response ;
4219+ }
4220+
4221+ $ user_id = $ user ->ID ;
4222+
4223+ $ meta_keys_to_erase = array ( 'description ' );
4224+
4225+ /**
4226+ * Filters the list of user meta keys removed during a personal data erasure request.
4227+ *
4228+ * @since 6.7.0
4229+ *
4230+ * @param string[] $meta_keys_to_erase User meta keys slated for deletion.
4231+ * @param WP_User $user The user whose data is being erased.
4232+ */
4233+ $ meta_keys_to_erase = apply_filters ( 'wp_privacy_user_personal_data_eraser_meta_keys ' , $ meta_keys_to_erase , $ user );
4234+
4235+ foreach ( $ meta_keys_to_erase as $ meta_key ) {
4236+ $ meta_key = sanitize_key ( $ meta_key );
4237+
4238+ if ( '' === $ meta_key ) {
4239+ continue ;
4240+ }
4241+
4242+ if ( ! metadata_exists ( 'user ' , $ user_id , $ meta_key ) ) {
4243+ continue ;
4244+ }
4245+
4246+ $ deleted = delete_user_meta ( $ user_id , $ meta_key );
4247+
4248+ if ( $ deleted ) {
4249+ $ response ['items_removed ' ] = true ;
4250+ } else {
4251+ $ response ['items_retained ' ] = true ;
4252+ $ response ['messages ' ][] = sprintf (
4253+ /* translators: %s: User meta key. */
4254+ __ ( 'User meta "%s" could not be erased. ' ),
4255+ $ meta_key
4256+ );
4257+ }
4258+ }
4259+
4260+ return $ response ;
4261+ }
4262+
41684263/**
41694264 * Updates log when privacy request is confirmed.
41704265 *
0 commit comments