Есть сайт на WordPress, где установлен плагин Contact Form 7, и дополнительные плюшки для него:
- CF7 Smart Grid Design Extension
- Contact Form 7 — Dynamic Text Extension
- Contact Form 7 Polylang extension
Обновили CF7 Smart Grid Design Extension (Версия 4.12.2), и плагин Contact Form 7 стал глючить, в админке формы не открывались нормально для редактирования
Обновили тогда Contact Form 7 до последней (Версия 5.5.2), и все стало нормально работать, НО уведомления об ошибках заполнения формы перестали показываться и форму стало корежить (речь не про админку а про лицевую часть сайта frontend).
Перечень возникших багов:
- Перед тегом <label> стал появляться тег <p>, хотя раньше небыло, из-за этого поехала верстка, ну это поправимо, просто указать явно тег <div> перед тегом <label>, и дать диву нужные стили
- Стали появляться теги <br> хотя в редакторе кода их нет, это из-за того что код был на разных строчках, и пофиг что код в редакторе html, интерпретатор сам добавил и разрешения не спросит.
- Перестали показываться уведомления об ошибках заполнения формы, просто отображается пустое поле где нет текста.
Если две первых ошибки легко устраняются в редакторе и стилями, то последняя просто гвоздь программы.
Работа над устранением бага
Есть такая форма
После отправки заявки с незаполненными полями, должно показаться уведомление об ошибке заполнения, но видим такую картину
Поле для сообщения есть а текста нет.
В консоли браузера появляется ошибка
TypeError: n is null
Как оказалось, на сайте в теме, в функции (functions.php) был прописан следующий код
add_filter('wpcf7_form_elements', function($content) { $content = preg_replace('/<(span).*?class="\s*(?:.*\s)?wpcf7-form-control-wrap(?:\s[^"]+)?\s*"[^\>]*>(.*)<\/\1>/i', '\2', $content); return $content; });
Который убирал обрамления <span> вокруг полей ввода. Если закоментировать его то все уведомления опять показываются. Тоесть при обработки submit идет проверка полей, а поскольку стандартный вывод был изменен то и парсер контакт форм не может поля отловить и выдать адекватно уведомление, это при том что в прежней версии Contact Form 7, парсер нормально отрабатывал.
Теперь сообщение с текстом отображается