// ================================================================ // إنفايتنا — كود موحد كامل | ضعه في functions.php // ================================================================ if(!defined('INVATNA_PRODUCT_ID')) define('INVATNA_PRODUCT_ID', 5688); // ---------------------------------------------------------------- // 1. تعديل حقل الهاتف: تسمية + placeholder + إلزامي // (الحقل يبقى في DOM لكن مخفي بـ JS بعد ما الكارت يُبنى) // ---------------------------------------------------------------- add_filter('woocommerce_checkout_fields', 'invatna_phone_field'); function invatna_phone_field($fields){ $fields['billing']['billing_phone']['required'] = true; $fields['billing']['billing_phone']['label'] = 'رقم الواتساب (مع مفتاح الدولة)'; $fields['billing']['billing_phone']['placeholder'] = '+966XXXXXXXXX'; return $fields; } // ---------------------------------------------------------------- // 2. كارت التحقق + إخفاء الحقل الأصلي بـ JS (لا CSS) // ---------------------------------------------------------------- add_action('wp_footer','invatna_otp_ui'); function invatna_otp_ui(){ if(!is_checkout()) return; ?> update_meta_data('_invatna_verified_token', sanitize_text_field($_POST['invatna_verified_token'])); if(!empty($_POST['invatna_verified_phone'])) $order->update_meta_data('_invatna_verified_phone', sanitize_text_field($_POST['invatna_verified_phone'])); } // ---------------------------------------------------------------- // 4. إرسال بيانات الطلب لإنفايتنا بعد اكتمال الدفع // ---------------------------------------------------------------- add_action('woocommerce_payment_complete','send_to_invatna'); function send_to_invatna($order_id){ $order = wc_get_order($order_id); if(!$order) return; $has_target = false; foreach($order->get_items() as $item){ if($item->get_product_id() == INVATNA_PRODUCT_ID){ $has_target = true; break; } } if(!$has_target) return; $verified_phone = $order->get_meta('_invatna_verified_phone'); $phone = !empty($verified_phone) ? $verified_phone : $order->get_billing_phone(); $name = trim($order->get_billing_first_name().' '.$order->get_billing_last_name()); $verified_token = $order->get_meta('_invatna_verified_token') ?: ''; $quantity=200; $qr_option=''; $event_date=''; $event_time=''; $hallname=''; $delivery_method=''; foreach($order->get_items() as $item){ if($item->get_product_id() != INVATNA_PRODUCT_ID) continue; foreach($item->get_meta_data() as $meta){ $k = $meta->key; $v = $meta->value; if(stripos($k,'عدد')!==false || stripos($k,'quantity')!==false) if(preg_match('/\d+/',$v,$m)) $quantity = intval($m[0]); if(stripos($k,'qr')!==false) $qr_option = $v; if(stripos($k,'date')!==false || $k==='التاريخ') $event_date = $v; if(stripos($k,'time')!==false || $k==='الوقت') $event_time = $v; if(stripos($k,'hall')!==false || stripos($k,'قاعة')!==false || stripos($k,'مكان')!==false) $hallname = $v; if(stripos($k,'delivery')!==false) $delivery_method = $v; } } $final_phone = preg_replace('/[^0-9]/','', trim($phone)); $response = wp_remote_post('https://invite-bot.replit.app/api/webhook/woocommerce',[ 'headers' => ['Content-Type' => 'application/json'], 'body' => json_encode([ 'customer_phone' => $final_phone, 'customer_name' => $name, 'quantity' => $quantity, 'order_id' => $order_id, 'product_id' => INVATNA_PRODUCT_ID, 'date' => $event_date, 'time' => $event_time, 'hallname' => $hallname, 'delivery_method' => $delivery_method, 'qr_option' => $qr_option, 'woo_verified_token' => $verified_token, ]), 'timeout' => 30, ]); if(is_wp_error($response)) error_log('Invatna webhook error: '.$response->get_error_message()); }