У Contact Form 7 типичная проблема не в самой форме, а в том, что его стили и скрипты могут грузиться на всем сайте. На небольшом проекте это незаметно, но на контентном сайте или лендинге лишние подключения создают шум: больше запросов, сложнее контроль над кешем, иногда конфликтуют стили темы или других плагинов.
Если форма нужна только на странице Контакты или в нескольких шаблонах, нет смысла держать CF7-ассеты на каждой записи, архиве и главной. Ниже — рабочие способы отключить лишнее без поломки отправки формы.
Когда это действительно нужно
Сначала проверьте, есть ли проблема вообще. Не стоит отключать активы «на всякий случай», если у вас форма стоит в шапке, футере, попапе или вставляется через виджет на многих страницах. В таком случае скрипты нужны глобально.
Признаки, что Contact Form 7 грузится лишний раз
- в
view-sourceили DevTools на страницах без формы естьcontact-form-7CSS и JS; - PageSpeed/Lighthouse показывает лишние ресурсы, связанные с CF7;
- на страницах без формы в HTML есть только подключенные ассеты плагина, но сам блок формы отсутствует;
- после отключения CF7-скриптов на части страниц ничего не меняется, потому что формы там нет.
Если форма вставлена через шорткод в шаблон, блок или конструктор, сначала найдите все места использования. Иначе можно отключить скрипт там, где он нужен.
Диагностика: где именно подключается Contact Form 7
У CF7 есть собственные стили и скрипты, которые обычно подключаются через стандартные механизмы WordPress. Самый простой способ понять масштаб — открыть исходный код страницы и поискать строки вроде contact-form-7, wpcf7, contact-form-7/includes/css/styles.css и contact-form-7/includes/js/index.js.
Если используете Query Monitor, можно посмотреть список enqueued scripts/styles на конкретной странице. Это удобнее, чем гадать по исходнику, особенно если тема или другой плагин переопределяют загрузку.
Что проверить перед правкой кода
- на каких шаблонах реально есть форма;
- не вставляется ли форма через блок, виджет или popup;
- не используется ли AJAX-отправка, которая требует JS на странице;
- не завязаны ли стили формы на кастомную валидацию или маски ввода.
Способ 1: отключить стили и скрипты CF7 через functions.php
Если форма нужна только на отдельных страницах, можно снять регистрацию ассетов на фронтенде и подключать их точечно. Это самый предсказуемый вариант, если вы контролируете тему или дочернюю тему.
Ниже пример: отключаем стандартные стили и скрипты CF7 на всех страницах, кроме страницы с формой. Условие подставьте под свой проект — по ID, slug или шаблону.
add_action( 'wp_enqueue_scripts', function () {
if ( is_admin() ) {
return;
}
// Оставляем ассеты только на странице "contact".
if ( is_page( 'contact' ) ) {
return;
}
wp_dequeue_style( 'contact-form-7' );
wp_dequeue_script( 'contact-form-7' );
}, 20 );Если форма у вас не на одной странице, а на нескольких, лучше использовать массив условий или отдельную проверку шаблона. Например, для страницы контактов и страницы заявки:
add_action( 'wp_enqueue_scripts', function () {
if ( is_admin() ) {
return;
}
if ( is_page( array( 'contact', 'request' ) ) ) {
return;
}
wp_dequeue_style( 'contact-form-7' );
wp_dequeue_script( 'contact-form-7' );
}, 20 );Важно: если тема или другой плагин уже зависят от этих ассетов, не снимайте их без проверки. Иногда фронтенд-валидация или маска телефона ломается именно из-за отсутствия JS.
Способ 2: отключить загрузку через плагин оптимизации
Если вы уже используете плагин для чистки сайта, можно решить задачу без кода. Например, в Clearfy Pro есть инструменты для отключения лишних скриптов и стилей на отдельных страницах. Это удобно, когда проект ведется без доработки темы и нужно быстро управлять ассетами через админку.
Компромисс здесь простой: плагин ускоряет внедрение, но добавляет еще один слой настроек. Если сайт небольшой и у вас есть доступ к теме, код обычно надежнее. Если проект поддерживает контент-менеджер, интерфейс плагина практичнее.
| Подход | Плюсы | Минусы |
|---|---|---|
| Код в теме | Точный контроль, нет лишних зависимостей | Нужен доступ к теме и базовая дисциплина при обновлениях |
| Плагин оптимизации | Удобно для редактора, быстрое управление | Еще один плагин и еще одна точка настройки |
| Ничего не отключать | Минимум действий | Лишние ресурсы на страницах без формы |
Пошаговое решение без поломки формы
- Найдите все страницы, где форма реально используется.
- Проверьте, не вставлена ли она в глобальные области: header, footer, сайдбар, popup.
- Выберите способ управления: код или плагин.
- Отключите ассеты только на страницах без формы.
- Очистите кеш сайта, сервера и CDN.
- Проверьте отправку формы и внешний вид полей.
Если форма одна, а страниц много, удобнее сделать белый список: подключать CF7 только там, где он нужен. Это безопаснее, чем пытаться угадать все страницы, где его можно убрать.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Откройте страницу без формы и убедитесь, что в исходнике больше нет подключений CF7. Затем откройте страницу с формой и проверьте обратное: скрипты должны присутствовать, иначе отправка может сломаться.
Что проверить вручную
- форма отправляется без ошибок;
- сообщение об успехе или ошибке отображается корректно;
- валидация полей работает;
- в консоли браузера нет ошибок, связанных с
wpcf7; - на страницах без формы нет лишних файлов CF7 в Network.
Если используете кеширующий плагин или CDN, очистите их после изменений. Иначе вы можете смотреть на старую версию страницы и сделать ложный вывод, что код не сработал.
Частые ошибки и как их исправить
Отключили скрипт, но форма перестала отправляться
Значит, CF7 нужен на этой странице или в шаблоне, где форма выводится динамически. Верните скрипт и проверьте, не используется ли форма в попапе, который открывается позже загрузки страницы.
Сняли только JS, но остался CSS
Иногда убирают wp_dequeue_script, но забывают про стиль. В результате форма работает, но выглядит сломанной или конфликтует с темой. Если цель — убрать CF7 полностью на странице, снимайте оба ассета.
Использовали слишком общий условный тег
Например, is_page() без аргумента или проверку, которая срабатывает не там, где нужно. В итоге форма исчезает на нужной странице или, наоборот, скрипты остаются везде. Проверяйте условия на реальных URL, а не по памяти.
Не очистили кеш
Это частая причина ложных срабатываний. После правки кода или настроек оптимизации обязательно сбросьте кеш страницы, объекта и CDN, если он есть.
Практические советы по производительности и безопасности
Не пытайтесь «ускорить» сайт за счет отключения CF7 там, где форма реально нужна. Лучше убрать лишнее точечно, чем потом ловить ошибки отправки. Если на сайте много форм, имеет смысл унифицировать шаблон: одна логика вывода, одна точка подключения ассетов, понятные условия.
Если вы редактируете тему, делайте это в дочерней теме или через mu-plugin. Так изменения не потеряются после обновления. Для проектов, где важна чистка дублей и контроль технических настроек, иногда удобнее держать часть оптимизаций в отдельном плагине, а не размазывать их по шаблонам.
И еще один практический момент: если форма используется только на одной странице, не вставляйте ее в глобальные блоки ради удобства. Это почти всегда приводит к тому, что ассеты начинают грузиться везде, хотя бизнес-задача этого не требует.
В рабочем проекте хороший критерий простой: на страницах без формы CF7 не должен быть виден ни в HTML, ни в Network, а на странице с формой — должен работать без ошибок. Если оба условия выполняются, решение можно считать корректным.