'Wizup', 'callback' => [self::class, 'panel']]; return $panels; }); add_action('wpcf7_after_save', [self::class, 'save']); add_action('wpcf7_before_send_mail', [self::class, 'submit'], 1000, 3); } public static function fields($form): array { $fields = []; foreach ($form->scan_form_tags() as $tag) { if ($tag->name && !in_array($tag->basetype, ['file', 'password', 'submit', 'quiz', 'captcha', 'captchar', 'captchac'], true)) { $fields[$tag->name] = $tag->name; } } return $fields; } public static function panel($form): void { $s = Settings::clean((array) get_post_meta($form->id(), '_wizup_forms', true)); $fields = self::fields($form); echo '

שליחת פרטי הטופס ל-Wizup

חברו את החשבון פעם אחת ב-הגדרות Wizup Forms, ואז בחרו אילו שדות להעביר מהטופס הזה.

'; wp_nonce_field('wizup_forms_cf7', 'wizup_forms_nonce'); echo ''; foreach (['name' => 'שם / שם פרטי (חובה)', 'last_name' => 'שם משפחה (אופציונלי)', 'phone' => 'טלפון (חובה)', 'email' => 'אימייל'] as $key => $label) { echo ''; } echo '
'; self::select('wizup_forms[' . $key . ']', $fields, $s[$key], 'wf-' . $key); echo '

972 לישראל. ריק: נדרש מספר בינלאומי שמתחיל ב-+. הקידומת מצורפת רק למספר מקומי.

'; self::select('wizup_forms[stage_id]', Settings::stages(), (string) $s['stage_id'], 'wf-stage', 'שלב ברירת המחדל ב-Wizup'); echo '

שדות מותאמים

הדביקו את מפתח השדה ב-Wizup (ערך key), ללא מרכאות. שם התצוגה label אינו המפתח. להודעת הטופס אפשר להגדיר ב-Wizup שדה מסוג טקסט ארוך. שדה מסוג תיבת סימון דורש בחירת ״כן / לא״.

מדריך: יצירת שדה ואיתור המפתח ב-DevTools

'; $rows = $s['custom']; for ($i = 0; $i < min(100, max(5, count($rows) + 2)); $i++) { $row = $rows[$i] ?? ['key' => '', 'field' => '', 'type' => 'text']; echo ''; } echo '
מפתח השדה ב-Wizupשדה מהטופססוג ערך
'; self::select('wizup_forms[custom][' . $i . '][field]', $fields, $row['field'], 'wf-field-' . $i); echo '

לאחר ההגדרה לחצו על כפתור שמירת הטופס. רק פניות שעברו את בדיקות הטופס והספאם ייכנסו לתור. המייל של הטופס ממשיך לעבוד כרגיל.

'; } private static function select(string $name, array $options, string $value, string $id, string $empty = '- בחרו שדה -'): void { echo ''; } public static function save($form): void { $nonce = isset($_POST['wizup_forms_nonce']) && is_string($_POST['wizup_forms_nonce']) ? sanitize_text_field(wp_unslash($_POST['wizup_forms_nonce'])) : ''; if (!is_string($nonce) || !wp_verify_nonce($nonce, 'wizup_forms_cf7') || !current_user_can('wpcf7_edit_contact_form', $form->id())) { return; } if (!isset($_POST['wizup_forms']) || !is_array($_POST['wizup_forms'])) { return; } // Settings::clean validates every scalar, field ID, country code and custom-field row. $input = Settings::clean(wp_unslash($_POST['wizup_forms'])); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Dedicated schema sanitizer. update_post_meta($form->id(), '_wizup_forms', $input); } public static function submit($form, &$abort, $submission): void { $s = Settings::clean((array) get_post_meta($form->id(), '_wizup_forms', true)); if ($abort || !$s['enabled'] || !$submission) { return; } // Use only declared, non-file form fields; never forward the entire POST body. $fields = array_intersect_key((array) $submission->get_posted_data(), self::fields($form)); $payload = Mapper::build($fields, $s); if (is_wp_error($payload)) { $abort = true; $submission->set_response('לא ניתן לשלוח את הפנייה. בדקו שם, טלפון ואימייל ונסו שוב, או פנו אלינו בדרך אחרת.'); return; } $result = Queue::enqueue($payload, 'cf7', (string) $form->id()); if (is_wp_error($result)) { $abort = true; $submission->set_response('לא ניתן לשמור את הפנייה כעת. נסו שוב בעוד רגע או פנו אלינו בדרך אחרת.'); } } }