От автора
Приветствую вас, друзья! Сегодня я хочу поделиться решением одной из самых частых проблем, с которой сталкиваются пользователи Contact Form 7 (CF7) — появление необработанных шорткодов в форме. Например, если вы когда-либо удаляли плагин, который использовал шорткоды в форме, то знаете, что вместо поля ввода может отображаться что-то вроде [your-shortcode] или [/your-shortcode]. Это портит внешний вид и мешает работе формы. Решение? Простой код для functions.php
, который очищает форму от таких «мусорных» шорткодов.
Зачем нужен этот код?
Contact Form 7 позволяет добавлять кастомные шорткоды через фильтр wpcf7_form_elements
. Однако если вы удаляете плагин или функционал, который отвечал за эти шорткоды, CF7 не очищает их автоматически. В результате в форме остаются неработающие теги вида [invalid-tag] или [/invalid-tag].
Например, если раньше вы использовали шорткод [date-field]
, а теперь он больше не зарегистрирован, посетители увидят просто текст [date-field]
вместо поля ввода даты. Это не только некрасиво, но и мешает сбору данных.
Как работает код?
Ниже приведенный код удаляет все необработанные шорткоды из формы CF7 перед её отображением. Он использует регулярное выражение для поиска и замены любых тегов в квадратных скобках, которые не были обработаны WordPress.
add_filter('wpcf7_form_elements', 'remove_unregistered_shortcodes_from_cf7');
function remove_unregistered_shortcodes_from_cf7($form) {
// Удаляем все необработанные шорткоды из формы CF7
$form = preg_replace('/$$\/?([a-z0-9_-]+)[^\]]*$$/', '', $form);
return $form;
}
Пояснение регулярного выражения:
$$
и$$
— ищем квадратные скобки.\/?
— допускаем наличие слэша в закрывающем теге (например,[/example]
).([a-z0-9_-]+)
— имя шорткода должно содержать буквы, цифры, подчеркивания или дефисы.[^\]]*
— пропускаем любые символы между именем шорткода и закрывающей скобкой.
Этот код удаляет все шорткоды , которые не были зарегистрированы в WordPress (например, через add_shortcode()
). Таким образом, вы избавляетесь от «мусорных» тегов, сохранив работоспособность формы.
Как добавить код в functions.php?
- Откройте файл
functions.php
вашей темы. - Вставьте код в конец файла.
- Сохраните изменения.
Важно: Перед редактированием сделайте резервную копию файла, чтобы избежать ошибок.
Когда использовать этот код?
- После удаления плагинов: Если вы удалили плагин, который добавлял кастомные шорткоды в форму CF7.
- При переносе сайта: Иногда шорткоды остаются в БД при миграции сайта.
- Для профилактики: Добавьте код в шаблон, чтобы предотвратить появление «мусора» в будущем.
Плюсы и минусы метода
Плюсы:
- Простота реализации.
- Не требует установки дополнительных плагинов.
- Работает мгновенно после активации.
Минусы:
- Удаляет все незарегистрированные шорткоды, включая те, которые вы могли намеренно оставить.
- Не решает проблему на уровне БД — шорткоды остаются в базе данных, но не отображаются на сайте.
Если вам нужно полностью очистить БД от неиспользуемых шорткодов, рекомендую использовать плагины вроде Clean Unused Shortcodes.
Альтернативные решения
- Ручная очистка: Откройте форму в админке CF7 и удалите ненужные шорткоды вручную.
- Фильтрация через
str_replace
: Если вы точно знаете, какие шорткоды нужно удалить, замените их на пустую строку: $form = str_replace(‘[old-shortcode]’, », $form); - Плагины: Используйте инструменты вроде Better Font Awesome или Shortcodes Ultimate, которые корректно обрабатывают шорткоды.
Советы от разработчика
- Тестируйте код на тестовом сайте , прежде чем применять его на рабочем проекте.
- Используйте кэширование: После очистки формы CF7, очистите кэш сайта, чтобы изменения отобразились сразу.
- Обновляйте плагины регулярно: Это поможет избежать появления «мусорных» шорткодов из-за конфликтов версий.
Заключение
Этот код — спасение для тех, кто сталкивается с проблемой необработанных шорткодов в Contact Form 7. Он прост в реализации, но требует осторожности: убедитесь, что удаляемые шорткоды действительно не нужны. Если вы хотите более гибкое решение, рассмотрите использование специализированных плагинов.
Если у вас есть вопросы или предложения, пишите в комментариях! А если статья была полезна — поделитесь ею в соцсетях. Удачи в ваших WordPress-проектах!