Elementor — один из самых популярных визуальных конструкторов для WordPress. Но иногда стандартных настроек и функций недостаточно, чтобы решить конкретные задачи. В таких случаях на помощь приходят хуки — специальные точки расширения, которые позволяют подмешивать или изменять поведение и контент элементов на лету.
Что такое хуки в Elementor и зачем они нужны
Хуки — это функции обратного вызова (callback), которые WordPress и плагины, в том числе Elementor, вызывают в определённые моменты для расширения функциональности. В Elementor хуки делятся на два типа: actions и filters.
- Action-хуки позволяют выполнить дополнительный код в определённый момент, например, добавить HTML или выполнить логику.
- Filter-хуки дают возможность изменить данные перед их выводом, например, изменить заголовок, содержимое, параметры виджета.
Использование хуков даёт гибкость и позволяет создавать динамические, интерактивные страницы без необходимости модифицировать исходный код Elementor.
Основные хуки Elementor для динамического изменения контента
Рассмотрим несколько популярных хуков, которые часто используются для кастомизации:
elementor/widget/render_content— фильтр для изменения HTML-кода виджета после его рендеринга.elementor/frontend/widget/before_render— action, вызываемый перед рендером виджета, подходит для подготовки данных.elementor/frontend/widget/after_render— action, вызываемый после рендера виджета.elementor/frontend/section/before_renderиelementor/frontend/column/before_render— позволяют изменять структуру секций и колонок.
Эти хуки можно использовать для изменения динамических текстов, вставки данных из пользовательских полей, или даже для добавления кастомных скриптов.
Пример: динамическое изменение заголовка в виджете Elementor
Допустим, нужно изменить заголовок виджета Heading в зависимости от текущей даты. Для этого применим фильтр elementor/widget/render_content и проверим, что виджет — это заголовок, после чего изменим текст.
add_filter('elementor/widget/render_content', 'wpelementor_change_heading_text', 10, 2); function wpelementor_change_heading_text($content, $widget) { if ('heading' === $widget->get_name()) { $today = date('N'); // День недели от 1 (Пн) до 7 (Вс) if ($today <= 5) { $new_text = 'Добро пожаловать в рабочие дни!'; } else { $new_text = 'Отдыхайте в выходные!'; } // Заменяем содержимое заголовка с помощью регулярного выражения $content = preg_replace('/>.*<\/h[1-6]>/U', '>' . $new_text . '</h' . $widget->get_settings('header_size') . '>', $content); } return $content; }В этом примере при рендере виджета Heading заголовок будет заменяться на разный текст в зависимости от дня недели. Такой подход работает без изменения настроек виджета в Elementor.
Пример: добавление кастомного CSS класса к виджету по условию
Иногда нужно динамически добавить CSS класс к определённому виджету, например, если пост находится в определённой категории. Для этого используем action elementor/frontend/widget/before_render:
add_action('elementor/frontend/widget/before_render', 'wpelementor_add_custom_class'); function wpelementor_add_custom_class($widget) { if ('image' === $widget->get_name()) { if (is_single() && has_category('special')) { $current_classes = $widget->get_render_attribute_string('wrapper'); $widget->add_render_attribute('wrapper', 'class', 'special-image'); } } }В этом коде к виджету Image на страницах с категорией «special» добавится класс special-image. Далее в CSS можно прописать стили для этого класса.
Использование пользовательских полей ACF с Elementor через хуки
Для динамического наполнения контента можно использовать популярный плагин Advanced Custom Fields (ACF). Вместо ручного добавления данных в виджеты, можно подтягивать поля из ACF динамически через фильтры.
Например, чтобы заменить текст в виджете Текст на значение поля ACF с ключом custom_text в текущем посте:
add_filter('elementor/widget/render_content', 'wpelementor_replace_text_with_acf', 10, 2); function wpelementor_replace_text_with_acf($content, $widget) { if ('text-editor' === $widget->get_name()) { $acf_value = get_field('custom_text'); if ($acf_value) { $content = preg_replace('/>.*<\/div>/U', '>' . esc_html($acf_value) . '</div>', $content); } } return $content; }Такой подход позволит не создавать отдельные кастомные виджеты, а использовать привычные с динамическим наполнением.
Советы по отладке и безопасности при использовании хуков в Elementor
При работе с хуками важно учитывать несколько моментов:
- Всегда проверяйте условия, чтобы не изменять все виджеты подряд — фильтры могут применяться глобально.
- Для вывода данных используйте функции экранирования (
esc_html,esc_attr), чтобы избежать уязвимостей XSS. - Тестируйте изменения на локальном сервере или staging-сайте, чтобы избежать сбоев на рабочем сайте.
- Документируйте свои функции, чтобы не потерять понимание логики со временем.
Заключение
Использование хуков Elementor — мощный инструмент для разработчиков, который позволяет реализовать уникальные сценарии динамического изменения контента и поведения виджетов. С помощью нескольких строк PHP-кода можно добиться гибкости, которая недоступна через стандартный интерфейс. Если хотите углубиться, рекомендуем изучить официальный документ по хукам Elementor и попробовать создавать собственные расширения.
Для удобства работы с Elementor и оптимизации сайта рекомендуем также ознакомиться с плагином Clearfy Pro, который поможет управлять производительностью и безопасностью WordPress.