| | 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 | |
| | 4263 | /** |