Id контактной формы CF7

запись от - 30 сентября 2023

Начиная с версии 5.8 разработчики Contact Form 7 внесли изменения в понятие Id формы.

Теперь есть 2 разных Id — Id шоткода (буквенно-цифровой) и внутренний Id (цифровой)

[contact-form-7 id="4be7c1b" title="Контактная форма 1"]

id=’4be7c1b‘ — это Id шоткода. А внутренний Id вообще нигде в настройках формы не отражается. Тем не менее определить его достаточно просто.

Если навести указатель мыши на форму в списке «Контактные формы» плагина Contact Form 7, внизу увидим ссылку.
Искомая часть post=64, Id этой формы 64.
Тоже самое можно увидеть в url страницы, если войти в режим редактирования формы
https://vahro.ru/wp-admin/admin.php?page=wpcf7&post=64&action=edit

Для того чтобы работать с формами из скриптов нужно знать именно внутренний (цифровой) id формы.
Это может потребоваться, чтобы определить какую-то конкретную форму в хуках CF7
типа wpcf7_skip_mail

И чтоб два раза не вставать

    // Получить все формы CF7 и все поля в каждой из форм
    $forms = WPCF7_ContactForm::find();

    foreach ($forms as $form) {
        $title     = $form->title();
        $post_id   = $form->id();           // Числовой ID
        $hash_id   = $form->hash();         // Буквенно-цифровой ID для шорткода
        echo "Форма $title: числовой ID = $post_id, hash = $hash_id<br>";
        $form_tags = $form->scan_form_tags(); // Все поля формы
        foreach ($form_tags as $tag) {
          // $tag - это объект WPCF7_FormTag
          echo 'Имя поля: ' . $tag['name'] . ' ' . $tag['type'] . '<br>';
        }
        echo '<hr>';
    }

Или так

      // Получить все формы CF7
      if ( post_type_exists( 'wpcf7_contact_form' ) ) {
        $args = array('post_type' => 'wpcf7_contact_form', 'post_per_page' => -1);
        $the_query = new WP_Query($args);
        if ($the_query->have_posts()) {
            while ( $the_query->have_posts() ) {
                $the_query->the_post();

                $arr_wpcf7 = get_object_vars( $post );
                print_r($arr_wpcf7['ID']);
                echo '<br>';
                print_r($arr_wpcf7['post_name']);
                echo '<br>';
                print_r($arr_wpcf7['post_title']);
                print_r('<hr>');

            }
            wp_reset_postdata();
        }
    }

Еще один Id — Id формы на фронтэнде. Если надо обращаться к форме JS скриптом.
Его добавим тегом html_id=»Id-формы-на-фронте»

// Чтобы обратиться к форме по id в шоткоде нужно добавить html_id 
// [contact-form-7 id="0729efd" title="Test form with one field" html_id="form-with-honeypot"]
<form action="/blog/plugins/honeypot#wpcf7-f1126-o1" method="post" class="wpcf7-form init" id="form-with-honeypot" aria-label="Контактная форма" novalidate="novalidate" data-status="init">