get_route(), '/contact-form-7/') !== false) {\n $form_id = $request->get_param('_wpcf7');\n if ($form_id) {\n $form = wpcf7_contact_form($form_id);\n if ($form) {\n $tags = $form->scan_form_tags();\n foreach ($tags as $tag) {\n // Fill empty radio buttons with their default value so CF7 doesn't throw "An undefined value was submitted"\n if ($tag->type === 'radio' && empty($_POST[$tag->name]) && !empty($tag->values)) {\n $_POST[$tag->name] = ((array) $tag->values)[0];\n }\n }\n }\n }\n }\n return $result;\n}, 10, 3);\n\n// 2. Trigger n8n webhook\nadd_action('wpcf7_submit', 'jcp_trigger_n8n_webhook', 10, 2);\nadd_action('wpcf7_before_send_mail', 'jcp_trigger_n8n_webhook', 10, 2);\nadd_action('wpcf7_mail_sent', 'jcp_trigger_n8n_webhook', 10, 1);\n\nfunction jcp_trigger_n8n_webhook($form = null, $arg2 = null) {\n static $sent = [];\n if (!$form || !is_a($form, 'WPCF7_ContactForm') || isset($sent[$form->id()])) return;\n $sent[$form->id()] = true;\n\n $sub = WPCF7_Submission::get_instance();\n $data = $sub ? $sub->get_posted_data() : $_POST;\n $url = $sub ? $sub->get_meta('url') : (wp_get_referer() ?: home_url($_SERVER['REQUEST_URI']));\n $clean = [];\n\n // Чистимо дані від wpcf7 та масивів\n foreach ($data as $k => $v) {\n if (strpos($k, '_wpcf7') !== 0) $clean[$k] = is_array($v) ? implode(', ', $v) : $v;\n }\n\n // Видалення полів з неактивних гілок (Regex-оптимізація)\n $html = $form->prop('form');\n $branch = 'br-0';\n if (preg_match('/data-step-type=["\']splitter["\'].*?\[radio\s+([^\s\]]+)\s+.*?("(?:[^"\\\\]|\\\\.)*"(?:\s+"(?:[^"\\\\]|\\\\.)*")*)/is', $html, $m)) {\n preg_match_all('/"((?:[^"\\\\]|\\\\.)*)"/', $m[2], $opts);\n if (isset($clean[$m[1]]) && ($idx = array_search($clean[$m[1]], $opts[1] ?? [])) !== false) {\n $branch = 'br-' . $idx;\n }\n }\n\n if (preg_match_all('/class=[\"\'][^\"\']*?branch-group\s+(br-\d+)[^\"\']*?[\"\'](.*?)?(?= $br) {\n if ($br !== $branch && preg_match_all('/\[(?:text|email|tel|url|textarea|select|radio|checkbox)\*?\s+([^\s\]]+)/i', $matches[2][$i], $tags)) {\n foreach ($tags[1] as $t) { unset($clean[$t]); }\n }\n }\n }\n\n $labels = [];\n if (preg_match_all('/]*class=["\'][^"\']*yur-quiz-label[^"\']*["\'][^>]*>(.*?)<\/span>.*?\[(?:text|email|tel|url|textarea|select|radio|checkbox)\*?\s+([^\s\]]+)/is', $html, $m)) {\n $labels = array_combine($m[2], array_map('trim', array_map('strip_tags', $m[1])));\n }\n\n $final_payload = [\n 'user_city' => isset($clean['user-city']) ? $clean['user-city'] : (isset($clean['city']) ? $clean['city'] : ''),\n 'your_phone' => isset($clean['your-phone']) ? $clean['your-phone'] : (isset($clean['phone']) ? $clean['phone'] : ''),\n 'source_url' => $url,\n 'form_id' => $form->id(),\n 'form_title' => $form->title(),\n 'answers' => []\n ];\n\n $exclude = ['user-city', 'city', 'your-phone', 'phone'];\n foreach ($clean as $k => $v) {\n if (!in_array($k, $exclude) && $k !== 'source_url' && $k !== 'form_id' && $k !== 'form_title') {\n $question = isset($labels[$k]) ? $labels[$k] : $k;\n // Decode HTML entities in case there are quotes or amps in the label\n $question = html_entity_decode($question, ENT_QUOTES | ENT_XML1, 'UTF-8');\n $final_payload['answers'][$question] = $v;\n }\n }\n\n $final_payload['utm_source'] = isset($_COOKIE['utm_source']) ? sanitize_text_field($_COOKIE['utm_source']) : ''; $final_payload['utm_medium'] = isset($_COOKIE['utm_medium']) ? sanitize_text_field($_COOKIE['utm_medium']) : ''; $final_payload['utm_campaign'] = isset($_COOKIE['utm_campaign']) ? sanitize_text_field($_COOKIE['utm_campaign']) : ''; $final_payload['utm_term'] = isset($_COOKIE['utm_term']) ? sanitize_text_field($_COOKIE['utm_term']) : ''; $final_payload['utm_content'] = isset($_COOKIE['utm_content']) ? sanitize_text_field($_COOKIE['utm_content']) : ''; $final_payload['gclid'] = isset($_COOKIE['gclid']) ? sanitize_text_field($_COOKIE['gclid']) : ''; \n $bbcode = [];\n foreach ($final_payload['answers'] as $q => $a) {\n $bbcode[] = "[b]" . $q . "[/b]\n" . $a;\n }\n $final_payload['answers_bbcode'] = implode("\n\n", $bbcode);\n\n $res = wp_remote_post('https://n8n.jurconsult.click/webhook/contact-form-from-jurconsult', [\n 'body' => json_encode($final_payload),\n 'headers' => ['Content-Type' => 'application/json'],\n 'timeout' => 5,\n 'blocking' => true, // changed to true for debugging\n 'sslverify' => false\n ]);\n\n update_option('jcp_last_n8n_webhook_log', [\n 'time' => current_time('mysql'),\n 'form_id' => $form->id(),\n 'payload' => $final_payload,\n 'code' => is_wp_error($res) ? $res->get_error_message() : wp_remote_retrieve_response_code($res)\n ]);\n}{"id":23506,"date":"2022-11-28T17:45:39","date_gmt":"2022-11-28T14:45:39","guid":{"rendered":"https:\/\/jurconsult.pro\/otp-faktoring-ukraina-bylo-otkazano-v-iske-na-summu-bolee-330-000-grn\/"},"modified":"2026-03-06T09:59:35","modified_gmt":"2026-03-06T06:59:35","slug":"otp-faktoring-ukraina-bylo-otkazano-v-iske-na-summu-bolee-330-000-grn","status":"publish","type":"post","link":"https:\/\/jurconsult.pro\/ru\/kredyty\/otp-faktoring-ukraina-bylo-otkazano-v-iske-na-summu-bolee-330-000-grn\/","title":{"rendered":"\u041e\u0422\u041f \u0424\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0423\u043a\u0440\u0430\u0438\u043d\u0430 \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0438\u0441\u043a\u0435 \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 \u0431\u043e\u043b\u0435\u0435 330 000 \u0433\u0440\u043d."},"content":{"rendered":"
\n
\n

\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/p>\n<\/span><\/div>\n