__('Aivie for WooCommerce', 'aivie-for-woocommerce'), 'callback' => [self::class, 'exportPersonalData'], ]; return $exporters; } public static function registerEraser(array $erasers): array { $erasers['aivie-for-woocommerce'] = [ 'eraser_friendly_name' => __('Aivie for WooCommerce', 'aivie-for-woocommerce'), 'callback' => [self::class, 'erasePersonalData'], ]; return $erasers; } public static function exportPersonalData(string $email, int $page = 1): array { $exportData = []; $orders = wc_get_orders([ 'billing_email' => $email, 'limit' => 20, 'page' => $page, 'return' => 'objects', ]); foreach ($orders as $order) { if (! $order instanceof \WC_Order) { continue; } $item = [ 'group_id' => 'aivie-for-woocommerce', 'group_label' => __('Aivie for WooCommerce Sync Data', 'aivie-for-woocommerce'), 'item_id' => 'aivie-wc-order-' . $order->get_id(), 'data' => [], ]; $metaKeys = [ '_aivie_wc_last_sync_status', '_aivie_wc_last_sync_type', '_aivie_wc_last_sync_at', '_aivie_wc_last_sync_event_id', '_aivie_wc_tracking_contact_id', '_aivie_wc_last_payment_failure_reason', ]; foreach ($metaKeys as $key) { $value = $order->get_meta($key); if ('' !== (string) $value) { $item['data'][] = [ 'name' => $key, 'value' => $value, ]; } } if (! empty($item['data'])) { $exportData[] = $item; } } return [ 'data' => $exportData, 'done' => count($orders) < 20, ]; } public static function erasePersonalData(string $email, int $page = 1): array { $itemsRemoved = false; $orders = wc_get_orders([ 'billing_email' => $email, 'limit' => 20, 'page' => $page, 'return' => 'objects', ]); foreach ($orders as $order) { if (! $order instanceof \WC_Order) { continue; } // Remove tracking contact ID only — keep sync status meta for audit trail. $trackingId = $order->get_meta('_aivie_wc_tracking_contact_id'); if ('' !== (string) $trackingId) { $order->delete_meta_data('_aivie_wc_tracking_contact_id'); $order->save_meta_data(); $itemsRemoved = true; } } // Also remove from user meta if we can identify the user. $user = get_user_by('email', $email); if ($user instanceof \WP_User) { delete_user_meta($user->ID, '_aivie_wc_tracking_contact_id'); $itemsRemoved = true; } return [ 'items_removed' => $itemsRemoved, 'items_retained' => false, 'messages' => [], 'done' => count($orders) < 20, ]; } }