From d3ec580ec85cc9a57a185d8d959133a34befefcf Mon Sep 17 00:00:00 2001 From: Dwindi Ramadhana Date: Fri, 9 Jan 2026 10:06:20 +0700 Subject: [PATCH] feat: cleanup and improvements for checkout fields - Removed all debug logging (backend and frontend) - Added filter hook 'woonoow_standard_checkout_field_keys' for extensibility - Added form-row-wide class support to admin OrderForm - Tax is automatically handled by WC's calculate_totals() --- .../src/routes/Orders/partials/OrderForm.tsx | 4 +++- customer-spa/src/pages/Checkout/index.tsx | 10 ---------- includes/Api/CheckoutController.php | 20 +++++++++---------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/admin-spa/src/routes/Orders/partials/OrderForm.tsx b/admin-spa/src/routes/Orders/partials/OrderForm.tsx index df8219a..408c9e9 100644 --- a/admin-spa/src/routes/Orders/partials/OrderForm.tsx +++ b/admin-spa/src/routes/Orders/partials/OrderForm.tsx @@ -1165,7 +1165,9 @@ export default function OrderForm({ .filter((f: any) => f.fieldset === 'shipping' && !f.hidden) .sort((a: any, b: any) => (a.priority || 0) - (b.priority || 0)) .map((field: any) => { - const isWide = ['address_1', 'address_2'].includes(field.key.replace('shipping_', '')); + // Check for full width: address fields or form-row-wide class from PHP + const hasFormRowWide = Array.isArray(field.class) && field.class.includes('form-row-wide'); + const isWide = hasFormRowWide || ['address_1', 'address_2'].includes(field.key.replace('shipping_', '')); const fieldKey = field.key.replace('shipping_', ''); return ( diff --git a/customer-spa/src/pages/Checkout/index.tsx b/customer-spa/src/pages/Checkout/index.tsx index 3029d4b..30052e2 100644 --- a/customer-spa/src/pages/Checkout/index.tsx +++ b/customer-spa/src/pages/Checkout/index.tsx @@ -569,16 +569,6 @@ export default function Checkout() { custom_fields: customFieldData, }; - // DEBUG: Log shipping data being sent - console.log('[WooNooW DEBUG] Order Shipping Data:', { - selectedShippingRate, - shippingCost, - shippingRatesCount: shippingRates.length, - foundRate: shippingRates.find(r => r.id === selectedShippingRate), - orderData_shipping_cost: orderData.shipping_cost, - orderData_shipping_title: orderData.shipping_title, - }); - // Submit order const response = await apiClient.post('/checkout/submit', orderData); const data = (response as any).data || response; diff --git a/includes/Api/CheckoutController.php b/includes/Api/CheckoutController.php index 45d0b4c..5e331d0 100644 --- a/includes/Api/CheckoutController.php +++ b/includes/Api/CheckoutController.php @@ -414,11 +414,6 @@ class CheckoutController { } // Shipping (best‑effort estimate) - // DEBUG: Log shipping data for troubleshooting - error_log('[WooNooW Shipping Debug] shipping_method: ' . ($payload['shipping_method'] ?? 'null')); - error_log('[WooNooW Shipping Debug] shipping_cost: ' . ($payload['shipping_cost'] ?? 'null')); - error_log('[WooNooW Shipping Debug] shipping_title: ' . ($payload['shipping_title'] ?? 'null')); - if (!empty($payload['shipping_method'])) { $rate = $this->find_shipping_rate_for_order($order, $payload['shipping_method']); if ($rate instanceof WC_Shipping_Rate) { @@ -431,7 +426,6 @@ class CheckoutController { 'taxes' => $rate->get_taxes(), ]); $order->add_item($item); - error_log('[WooNooW Shipping Debug] Added shipping via WC rate lookup: ' . $rate->get_cost()); } elseif (!empty($payload['shipping_cost']) && $payload['shipping_cost'] > 0) { // Fallback: use shipping_cost directly from frontend // This handles API-based shipping like Rajaongkir where WC zones don't apply @@ -449,9 +443,6 @@ class CheckoutController { 'total' => floatval($payload['shipping_cost']), ]); $order->add_item($item); - error_log('[WooNooW Shipping Debug] Added shipping via frontend fallback: ' . $payload['shipping_cost']); - } else { - error_log('[WooNooW Shipping Debug] NO shipping added - rate lookup failed and no valid shipping_cost'); } } @@ -571,9 +562,10 @@ class CheckoutController { /** * Get list of standard WooCommerce field keys + * Plugins can extend this list via the 'woonoow_standard_checkout_field_keys' filter */ private function get_standard_field_keys(): array { - return [ + $keys = [ 'billing_first_name', 'billing_last_name', 'billing_company', @@ -596,6 +588,14 @@ class CheckoutController { 'shipping_postcode', 'order_comments', ]; + + /** + * Filter the list of standard checkout field keys. + * Plugins can add their own field keys to be recognized as "standard" (not custom). + * + * @param array $keys List of standard field keys + */ + return apply_filters('woonoow_standard_checkout_field_keys', $keys); } /** ----------------- Helpers ----------------- **/