При использовании виджета Off‑Canvas в Elementor часто нужно сделать кнопку внутри выезжающего меню, которая:
- закрывает Off‑Canvas,
- и сразу открывает попап (форма обратного звонка и т.п.).
По умолчанию, если просто повесить на кнопку триггер попапа, окно Off‑Canvas остаётся открытым сверху, и попап оказывается «под» ним. Ниже — универсальное решение, которое можно повторить на любом сайте.
1. Настраиваем кнопку внутри Off‑Canvas
- Откройте в Elementor шаблон шапки или страницы, где используется виджет Off‑Canvas.
- Внутри Off‑Canvas добавьте кнопку, которая должна открывать попап (например, «Заказать звонок»).
- Выделите кнопку и во вкладке Содержимое → Ссылка → Динамические теги выберите нужный попап и режим Open Popup. Так кнопка начнёт открывать попап штатными средствами Elementor.
- Во вкладке Дополнительно → CSS ID задайте кнопке ID, например: canvas_call
2. Находим ссылку, которая закрывает Off‑Canvas
У виджета Off‑Canvas есть своя «системная» ссылка закрытия вида:
<a class="elementor-icon"
href="#elementor-action%3Aaction%3Doff_canvas%3Aclose%26settings%3D..."
aria-controls="off-canvas-XXXX"
aria-expanded="true">
<i class="fas fa-times"></i>
</a>


Именно по этой ссылке Elementor понимает, что нужно закрыть Off‑Canvas.
Нам нужна только её часть href="#elementor-action%3Aaction%3Doff_canvas%3Aclose...".
Универсальный селектор для такой ссылки:
a[href*="#elementor-action%3Aaction%3Doff_canvas%3Aclose"]
3. JS‑код: закрываем Off‑Canvas, попап остаётся на динамическом теге
Дальше добавим небольшой JS, который при клике по нашей кнопке:
- программно нажмёт на ссылку закрытия Off‑Canvas;
- не будет мешать штатному открытию попапа через динамический тег.
Вариант через functions.php (универсальный)
Добавьте в functions.php вашей темы или в отдельный плагин сниппетов:
add_action( 'wp_footer', function() {
?>
<script>
jQuery(function($) {
$(document).on('click', '#canvas_call', function(e) {
// Не отменяем клик целиком, чтобы сработал динамический тег попапа
// Закрываем Off-Canvas, «нажимая» на его стандартную ссылку закрытия
$('a[href*="#elementor-action%3Aaction%3Doff_canvas%3Aclose"]').trigger('click');
// После этого Elementor сам откроет попап по динамическому тегу на кнопке
});
});
</script>
<?php
});
Что здесь важно:
#canvas_call— ID кнопки внутри Off‑Canvas (можно заменить на свой, если используете другое имя).- Селектор
a[href*="#elementor-action%3Aaction%3Doff_canvas%3Aclose"]ищет «родную» ссылку закрытия Off‑Canvas и вызывает по ней клик. e.preventDefault()намеренно закомментирован, чтобы не блокировать стандартное действие кнопки (открытие попапа через Dynamic Tag).
4. Как повторить на любом сайте
Чтобы воспроизвести решение на другом проекте:
- Off‑Canvas:
- Используйте виджет Off‑Canvas от Elementor;
- убедитесь, что у него есть ссылка закрытия с
hrefвида#elementor-action:action=off_canvas:close....
- Кнопка в Off‑Canvas:
- Добавьте кнопку;
- назначьте ей Dynamic Tag → Popup → Open Popup с нужным попапом;
- задайте ей уникальный CSS ID, например
canvas_call.
- JS‑код:
- Вставьте приведённый выше код в
functions.phpили в модуль сниппетов (Code Snippets, WPCode и т.п.); - при необходимости измените:
#canvas_call— на ваш ID кнопки;- селектор ссылки закрытия Off‑Canvas — если у вашего виджета другое значение
href(можно задать ссылке закрытия класс, напримерoffcanvas-close, и в JS заменить строку на$('.offcanvas-close').trigger('click');).
- Вставьте приведённый выше код в
После этого при клике по кнопке:
- сначала закрывается Off‑Canvas,
- затем, штатно, открывается попап, заданный в Dynamic Tag’е Elementor.
Такой подход не жёстко привязан к конкретной теме или плагину — достаточно поймать ссылку закрытия Off‑Canvas и ID кнопки, поэтому его удобно переносить между проектами и оформлять как сниппет.



