Регулярные выражения (RegEx) — мощный инструмент для поиска и обработки строк. В WordPress они часто применяются для фильтрации данных, валидации форм, парсинга контента и настройки запросов. В этой статье подробно разберём, как эффективно использовать регулярные выражения в WordPress, с примерами плагинов и собственных функций.
Что такое регулярные выражения и зачем они нужны в WordPress
Регулярное выражение — это шаблон, описывающий множество строк. С их помощью можно быстро находить, проверять и преобразовывать тексты. В WordPress регулярные выражения полезны в следующих задачах:
- Валидация пользовательского ввода (email, телефон, URL).
- Фильтрация и замена контента в постах и комментариях.
- Обработка и парсинг данных из внешних источников.
- Настройка сложных условий для WP_Query и фильтров.
Стандартные функции PHP для работы с регулярными выражениями — preg_match, preg_replace, preg_split и другие, полностью доступны в WordPress.
Пример 1. Валидация email с помощью регулярных выражений в WordPress
WordPress имеет собственную функцию is_email(), но иногда нужно более строгое или специфичное правило проверки. Рассмотрим, как создать собственную функцию проверки email с регулярным выражением.
function wpconfig_is_valid_email($email) {
$pattern = '/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i';
return preg_match($pattern, $email) === 1;
}Эта функция проверяет, соответствует ли email базовому шаблону с латиницей и доменом. Вы можете интегрировать её в обработчики форм или использовать в фильтрах.
Пример использования в обработчике формы
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = sanitize_email($_POST['email']);
if (!wpconfig_is_valid_email($email)) {
echo 'Введите корректный email.';
} else {
echo 'Email прошёл проверку.';
}
}Пример 2. Фильтрация короткого кода с регулярными выражениями
Иногда нужно создать шорткод, который принимает параметры в сложном формате или фильтровать контент по определённым паттернам. С помощью регулярных выражений можно извлечь нужные части.
Пример: шорткод [wpconfig_filter text="пример текста"] будет выводить только слова, подходящие под регулярное выражение.
function wpconfig_shortcode_filter($atts) {
$atts = shortcode_atts(array(
'text' => '',
), $atts, 'wpconfig_filter');
$pattern = '/\b[а-яё]{4,}\b/ui'; // слова кириллицей длиной от 4 символов
preg_match_all($pattern, $atts['text'], $matches);
if (!empty($matches[0])) {
return implode(', ', $matches[0]);
}
return 'Совпадений не найдено';
}
add_shortcode('wpconfig_filter', 'wpconfig_shortcode_filter');В этом примере регулярное выражение ищет слова на русском языке не короче 4 букв. Результат будет выведен через запятую.
Пример 3. Использование регулярных выражений в WP_Query для фильтрации по метаполям
По умолчанию WP_Query не поддерживает фильтрацию с регулярными выражениями. Но можно комбинировать SQL-запросы и хуки. Для этого используем фильтр posts_where и добавим условие с REGEXP.
function wpconfig_posts_where_regexp($where, $query) {
global $wpdb;
if ($query->get('meta_key_regexp')) {
$meta_key = esc_sql($query->get('meta_key_regexp'));
$regexp = esc_sql($query->get('meta_value_regexp'));
$where .= " AND EXISTS (
SELECT 1 FROM {$wpdb->postmeta} pm
WHERE pm.post_id = {$wpdb->posts}.ID
AND pm.meta_key = '{$meta_key}'
AND pm.meta_value REGEXP '{$regexp}'
)";
}
return $where;
}
add_filter('posts_where', 'wpconfig_posts_where_regexp', 10, 2);Теперь можно использовать этот параметр при запросе:
$query = new WP_Query(array(
'meta_key_regexp' => 'custom_field',
'meta_value_regexp' => '^[0-9]{3}-[A-Z]+$',
));Этот запрос вернёт посты, где custom_field соответствует шаблону три цифры, дефис, заглавные буквы.
Рекомендованные плагины для работы с регулярными выражениями в WordPress
Если не хочется писать код самостоятельно, можно использовать проверенные плагины с поддержкой RegEx:
- WP phpMyAdmin — для прямого управления базой и сложных запросов с регулярными выражениями.
- Clearfy Pro — оптимизация и фильтрация, поддержка RegEx для SEO и безопасности.
- Search Regex — поиск и массовая замена в базе с использованием регулярных выражений.
Практические советы по написанию регулярных выражений для WordPress
Чтобы регулярки работали эффективно и не замедляли сайт, учитывайте следующие рекомендации:
- Используйте жадные и ленивые квантификаторы, чтобы избежать избыточных совпадений.
- Проверяйте регулярные выражения через онлайн-редакторы (regex101.com, regexr.com) перед применением.
- Экранируйте специальные символы в шаблонах и параметрах.
- Для кириллицы используйте модификатор
u(UTF-8), чтобы корректно обрабатывать русские символы. - Минимизируйте сложность регулярных выражений, чтобы избежать ошибок и тормозов.
Как отладить и протестировать регулярные выражения в WordPress
Отладка регулярных выражений — важный этап. Для этого можно создать временный файл плагина с функцией, которая выводит результат проверки или замену. Пример простой функции для теста:
function wpconfig_test_regex($pattern, $subject) {
if (preg_match($pattern, $subject, $matches)) {
echo 'Совпадение найдено: ' . htmlspecialchars($matches[0]);
} else {
echo 'Совпадений нет';
}
}Используйте её в админке или через AJAX, чтобы быстро проверить любые регулярные выражения без риска нарушить работу сайта.
Заключение по использованию регулярных выражений в WordPress
Регулярные выражения позволяют создавать гибкие и мощные решения для фильтрации и обработки данных в WordPress. Они незаменимы для разработчиков, работающих с нестандартными задачами валидации, парсинга и запросов. Используйте их аккуратно, тестируйте и комбинируйте с хуками WordPress для максимального эффекта.