$email_address, 'limit' => 10, 'paged' => $page, ) ); foreach ( $orders as $order ) { // Check if this order has any AgentShop tracking meta. $tracked_at = $order->get_meta( '_agentshop_tracked' ); $customer_id = $order->get_meta( '_agentshop_customer_id' ); $session_id = $order->get_meta( '_agentshop_session_id' ); $llm_source = $order->get_meta( '_agentshop_llm_source' ); // Only include if we have any tracking data. if ( $tracked_at || $customer_id || $session_id || $llm_source ) { $order_data = array( array( 'name' => __( 'Order ID', 'agentshop' ), 'value' => $order->get_id(), ), ); if ( $tracked_at ) { $order_data[] = array( 'name' => __( 'Tracked At', 'agentshop' ), 'value' => date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $tracked_at ), ); } if ( $customer_id ) { $order_data[] = array( 'name' => __( 'Customer ID', 'agentshop' ), 'value' => $customer_id, ); } if ( $session_id ) { $order_data[] = array( 'name' => __( 'Session ID', 'agentshop' ), 'value' => $session_id, ); } if ( $llm_source ) { $order_data[] = array( 'name' => __( 'LLM Source', 'agentshop' ), 'value' => $llm_source, ); } $data_to_export[] = array( 'group_id' => 'agentshop_tracking', 'group_label' => __( 'AgentShop Tracking Data', 'agentshop' ), 'group_description' => __( 'Order tracking data collected by AgentShop.', 'agentshop' ), 'item_id' => 'order-' . $order->get_id(), 'data' => $order_data, ); } } return array( 'data' => $data_to_export, 'done' => count( $orders ) < 10, ); } /** * Erase personal data. * * Following WordPress best practice: query by email first, then check/delete meta per item. * * @param string $email_address Email address. * @param int $page Page number. * @return array */ public static function erase_personal_data( $email_address, $page = 1 ) { $items_removed = false; $items_retained = false; $messages = array(); // Query orders by email (fast, indexed query). $orders = wc_get_orders( array( 'billing_email' => $email_address, 'limit' => 10, 'paged' => $page, ) ); foreach ( $orders as $order ) { // Check if this order has any AgentShop tracking meta. $has_tracking_data = $order->get_meta( '_agentshop_tracked' ) || $order->get_meta( '_agentshop_customer_id' ) || $order->get_meta( '_agentshop_session_id' ) || $order->get_meta( '_agentshop_llm_source' ); if ( $has_tracking_data ) { // Remove all AgentShop tracking meta. $order->delete_meta_data( '_agentshop_tracked' ); $order->delete_meta_data( '_agentshop_customer_id' ); $order->delete_meta_data( '_agentshop_session_id' ); $order->delete_meta_data( '_agentshop_llm_source' ); $order->save(); $items_removed = true; } } // Note: We cannot erase data from the AgentShop backend from here. // The user should contact AgentShop directly for full data deletion. if ( $items_removed ) { $messages[] = __( 'AgentShop tracking metadata has been removed from orders. For complete data deletion from AgentShop servers, please contact info@useagentshop.com', 'agentshop' ); } return array( 'items_removed' => $items_removed, 'items_retained' => $items_retained, 'messages' => $messages, 'done' => count( $orders ) < 10, ); } }