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">