Проблемы с Contact Form 7 или почему стоит отключать лишние скрипты
Приветствую друзья. В данной заметке речь пойдет об известном практически всем вордпрессерам плагине для создания контактных форм — Contact Form 7 и проблемами, связанными с его установкой на сайте.
Работая над созданием сайта для заказчика я столкнулся с непонятной ситуацией. Делал я страницу FaQ, где Вопрос-Ответ был реализован с помощью аккордеонов и спойлеров. Т.е. изначально при заходе на страницу посетитель видит лишь список вопросов , а при клике по какому-либо разворачивается портянка с ответом на него. Думаю вы нередко встречали такой прием.
Так вот, все работало чудесно, как вдруг в какой-то момент спойлеры просто перестали разворачиваться, хоть закликайся по ним. Тут же, первым делом заподозрил проблемы с работой скрипта jQuery, на котором собственно и работали аккордеоны. Стал думать почему такая беда случилась, и вспомнил, что незадолго до появления проблемы установил плагин Contact Form 7.
Зашел в админку, отключил плагин CForm 7, проверил аккордеоны — все работает, бинго! Пол дела сделано. Теперь нужно как-то установить причину и устранить проблему.
Причину так же быстро обнаружил — открыл код страницы и увидел что на сайте подключается несколько разных версий одного js-скрипта jQuery, одну из которых и подрубал наш заботливый плагин контактных форм.
Мало кто обращает внимание, что CForm 7 при установке принудительно подключает в код вашего сайта свои скрипты и стили на всех страницах. При том что у абсолютного большинства вебмастеров контактная форма находится всего на 1-й странице, тем самым создается бесполезная дополнительная нагрузка на сайт.
Дальше дело техники — побежал на форумы и мануалы искать простое решение. Нашел, вот, делюсь с вами =)
Как отключить css-стили и js-скрипты Contact Form 7 на лишних страницах
Собственно ничего сложного нет. Достаточно скопировать приведенный ниже код в файл вашего шаблона fuctions.php и прописать нужные страницы, на которых скрипты и стили плагина все таки будут работать.
[php]function deregister_cf7_scripts() {
if ( !is_page(array(1,2,5)) ) {
wp_deregister_script(‘contact-form-7’);
}
}
add_action(‘wp_print_scripts’, ‘deregister_cf7_scripts’, 100);</code>
function deregister_cf7_styles() {
if ( !is_page(array(1,2,5)) ) {
wp_deregister_style(‘contact-form-7’);
}
}
add_action(‘wp_print_styles’, ‘deregister_cf7_styles’, 100);[/php]
Там где в коде array(1,2,5) цифры в скобках нужно заменить на идентификаторы страниц, на которых у вас установлена форма обратной связи, перечисляем через запятую если больше одной, если страница одна, то без запятых, просто цифра.
Узнать ID страницы просто — достаточно зайти в админку вордпресса, нажать на редактирование нужной страницы и в адресной строке браузера найти хвост post=nnn, вот все цифры после post= это и есть ID страницы, копируем его и вставляем в код.
Рекомендую вписать себе данной код каждому вебмастеру, у которого стоит плагин Contact Form 7, даже если нет никаких конфликтов в работе скриптов. Тем самым вы себя обезопасите на будущее и уменьшите нагрузку на хостинг, повысите скорость загрузки страниц.
Комментариев: 10
Привет
Еще дополню, что такой фигней страдают и другие плагины.
Например оптимайзпресс, который МНОГО чего вставляет в код других шаблонов на сайте.
Дважды счетчики выводит)
Короче, аккуратнее с ними нужно быть.
Привет Дим.
Да, частенько сталкиваюсь с такими плагинами которые кучу шлака тихонько подключают к коду, в лучшем случае просто сайт грузится дольше будет… а могут и делов наделать
Без лишнего-ненужного сайт всегда работает лучше 🙂
Это точно. В этом плане сайты на Вордпрессе целая свалка лишнего ненужного и каждый новый плагин добавляет свою порцию)
Привет! Код не совсем корректный. Он отключает регистрацию скрипта на заданных страницах, а надо бы наоборот делать сначала его совсем отключить, потом подключать там где требуется. Примерно так
function deregister_cf7_scripts() {
wp_deregister_script(‘contact-form-7’);
if ( is_page(array(1,2,5)) ) {
wp_register_script(‘contact-form-7’);
}
}
add_action(‘wp_print_scripts’, ‘deregister_cf7_scripts’, 100);
А стили у плагина можно отключить проще, для этого есть в плагине хук спецательный
add_filter( ‘wpcf7_load_css’, ‘__return_false’ );
Подобный есть и для js
Правда хук странный, ну да ладно
Привет Артем. Фиг знает, у меня данный код работает как заявлено — на всех страницах отрубил скрипты и стили CF7, а на одной нужной оставил. Проверял на нескольких сайтах, включая этот блог.
Но спорить не буду, ты в этом шаришь побольше меня однозначно, может твой вариант пригодится кому)
Ну я то не истина в последней инстанции, все надо тестировать. есл твой вариант работает, то и хорошо
Всем, привет. Подскажите, есть ли более оптимальный плагин контактных форм
или Contact Form 7 это лучшее, что есть?
Привет. На самом деле да — это лучший плагин контактных форм для Вордпресс. Но он достаточно тяжелый, и если вам нужна простенькая форма на 1 странице, то можете ее сделать вообще без плагинов. В сети достаточно скриптов готовых контактных форм
Еще я заметил, что Contact Form вставляет в код страницы сайта свои стили (я добавлял разные формы на сайте в разным местах, причем со своими правками), было бы хорошо, если бы он эти стили прописал в отдельном файле, не перегружая страницу. Из-за этих стилей у меня текст начинается в коде только с 1000й строки… Хотелось бы чтобы роботы шаря по моему сайту меньше читали ненужных символов.