Ой! Страница не найдена.
Похоже, что ничего не было найдено в этом месте. Может, попробовать поискать?
*/ function salebot_pro_get_utm($order, $key) { if (isset($_COOKIE[$key]) && !empty($_COOKIE[$key])) return sanitize_text_field($_COOKIE[$key]); $fields = ['_wc_order_attribution_'.$key, 'handl_'.$key, 'utm_'.$key, $key, 'handl_utm_'.$key]; foreach ($fields as $f) { $val = $order->get_meta($f); if (!empty($val)) return sanitize_text_field($val); } return ''; } /** * 4. ГЛАВНАЯ ЛОГИКА (v7.9.1) */ add_action('woocommerce_checkout_order_processed', 'salebot_pro_trigger_new', 10, 1); add_action('woocommerce_order_status_changed', 'salebot_pro_trigger_status', 10, 3); function salebot_pro_trigger_new($order_id) { salebot_pro_do_push($order_id, 'new'); } function salebot_pro_is_renewal_order($order_id) { $order = wc_get_order($order_id); if (!$order) return false; if (function_exists('wcs_order_contains_renewal') && wcs_order_contains_renewal($order)) { return true; } if (function_exists('wcs_order_contains_subscription') && wcs_order_contains_subscription($order, 'renewal')) { return true; } if (function_exists('wcs_get_subscriptions_for_renewal_order')) { $subscriptions = wcs_get_subscriptions_for_renewal_order($order); if (!empty($subscriptions)) return true; } return (bool) $order->get_meta('_subscription_renewal'); } function salebot_pro_trigger_status($order_id, $old, $new) { if ($new === 'completed' && salebot_pro_is_renewal_order($order_id)) { salebot_pro_do_push($order_id, 'new'); return; } // Send only selected status updates. Renewal completed orders are handled above as new orders. if (in_array($new, ['completed', 'cancelled'], true)) { salebot_pro_do_push($order_id, $new); } } function salebot_pro_do_push($order_id, $trigger_context) { static $processed = []; if (isset($processed[$order_id . '_' . $trigger_context])) return; $processed[$order_id . '_' . $trigger_context] = true; if (get_post_meta($order_id, '_sb_sent_' . $trigger_context, true)) return; $order = wc_get_order($order_id); if (!$order) return; $opts = get_option('salebot_pro_settings'); $api_key = trim(str_replace(["\r", "\n", " "], '', $opts['api_key'] ?? '')); $bot_id = trim($opts['bot_id'] ?? ''); if (!$api_key) return; $phone = preg_replace('/\D/', '', $order->get_billing_phone() ?: $order->get_meta('_billing_phone')); $email = $order->get_billing_email(); if (empty($phone) && empty($email)) return; $currency = $order->get_currency(); $status = $order->get_status(); $target_state_id = ''; if (isset($opts['funnels'])) { foreach ($opts['funnels'] as $f) { if ($f['currency'] === $currency) { $target_state_id = (string)($f['stages'][$status] ?? ''); break; } } } $items_detailed = []; foreach ($order->get_items() as $item) { $product = $item->get_product(); $items_detailed[] = [ 'name' => $item->get_name(), 'price' => $item->get_total(), 'qty' => $item->get_quantity(), 'link' => $product ? get_permalink($product->get_id()) : '' ]; } $product_name_first = !empty($items_detailed) ? $items_detailed[0]['name'] : 'Товар'; $woocommerce_data = [ 'first_name' => (string)$order->get_billing_first_name(), 'last_name' => (string)$order->get_billing_last_name(), 'email' => (string)$email, 'phone' => (string)$phone, 'utm_source' => (string)salebot_pro_get_utm($order, 'utm_source'), 'utm_medium' => (string)salebot_pro_get_utm($order, 'utm_medium'), 'utm_campaign' => (string)salebot_pro_get_utm($order, 'utm_campaign'), 'content' => (string)salebot_pro_get_utm($order, 'utm_content'), 'utm_term' => (string)salebot_pro_get_utm($order, 'utm_term'), 'source_site' => (string)parse_url(get_site_url(), PHP_URL_HOST), 'order_id' => (string)$order_id, 'total' => (string)$order->get_total(), 'currency' => (string)$currency, 'status' => (string)$status, 'payment_method' => (string)$order->get_payment_method_title(), 'products' => $items_detailed, 'target_state_id'=> (string)$target_state_id ]; // Логика формирования сообщения if ($trigger_context === 'new') { // Детальное сообщение для нового заказа $msg = "Новый заказ #{$order_id}\n"; $msg .= "Имя: {$woocommerce_data['first_name']} {$woocommerce_data['last_name']}\n"; $msg .= "Email: {$woocommerce_data['email']}\n"; $msg .= "Телефон: {$phone}\n\n"; $msg .= " Товары:\n"; foreach ($items_detailed as $item) { $msg .= "• {$item['name']} × {$item['qty']} — {$item['price']} {$currency}\n"; if (!empty($item['link'])) { $msg .= " {$item['link']}\n"; } } $msg .= "\n Сумма: {$woocommerce_data['total']} {$currency}\n"; $msg .= " Оплата: {$woocommerce_data['payment_method']}\n"; $msg .= "Статус: {$woocommerce_data['status']}\n\n"; $msg .= "utm_source: {$woocommerce_data['utm_source']}\n"; $msg .= "utm_medium: {$woocommerce_data['utm_medium']}\n"; $msg .= "utm_campaign: {$woocommerce_data['utm_campaign']}"; } else { // Короткий текст для ОБНОВЛЕНИЯ статуса (только для completed и cancelled) $msg = "Обновление статуса заказа #{$order_id}\n"; $msg .= "Новый статус: {$status}"; } $payload_cb = [ 'phone' => $phone, 'email' => $email, 'message' => $msg, 'bot_id' => $bot_id, 'client.woocommerce_data' => $woocommerce_data, 'client.client_name' => $woocommerce_data['first_name'], 'client.last_name' => $woocommerce_data['last_name'], 'zakaz_total' => $woocommerce_data['total'], 'zakaz_nomer' => (string)$order_id, 'zakaz_currency' => $woocommerce_data['currency'], 'zakaz_status' => $woocommerce_data['status'], 'target_state_id' => $target_state_id, 'utm_source' => $woocommerce_data['utm_source'], 'utm_medium' => $woocommerce_data['utm_medium'], 'utm_campaign' => $woocommerce_data['utm_campaign'] ]; wp_remote_post("https://chatter.salebot.pro/api/{$api_key}/whatsapp_callback", [ 'headers' => ['Content-Type' => 'application/json'], 'body' => wp_json_encode($payload_cb, JSON_UNESCAPED_UNICODE), 'timeout' => 20 ]); update_post_meta($order_id, '_sb_sent_' . $trigger_context, time()); }
Похоже, что ничего не было найдено в этом месте. Может, попробовать поискать?

ИП Ярмолинская Виктория Марковна
ИНН 783902451790.
Адрес: Санкт-Петербург, наб.р.Мойки 112, 190121 Россия
Документы
Контакты
Иврика. Иврит онлайн