Создание динамических popup в WordPress с помощью AJAX

В современном веб-разработке всплывающие окна (popup) часто используются для привлечения внимания пользователя к важной информации, предложениям или формам обратной связи. Но статические popup, которые грузятся вместе с основной страницей, могут замедлять сайт и создавать неудобства. В этой статье я расскажу, как создать динамические popup в WordPress с помощью AJAX, чтобы загружать содержимое только при необходимости, без перезагрузки страницы.

Почему стоит использовать динамические popup в WordPress

Статические popup загружаются вместе с остальным контентом страницы, что увеличивает время загрузки и может негативно сказаться на показателях скорости сайта. Использование AJAX позволяет загружать содержимое popup только в момент вызова, экономя ресурсы и улучшая UX.

Кроме того, с помощью AJAX можно подгружать контент из базы данных или API, делать персонализированные предложения и создавать интерактивные формы без перезагрузки страницы.

В качестве примера мы создадим простой плагин для WordPress, который будет реализовывать динамический popup с помощью AJAX.

Обзор плагинов для создания popup с поддержкой AJAX

Перед тем как приступать к написанию кода, рассмотрим популярные плагины, которые поддерживают динамические popup:

  • Popup Maker — мощный плагин с поддержкой AJAX-загрузки содержимого через шорткоды и PHP-функции.
  • Elementor Pro — конструктор страниц с возможностью создания popup, включая динамическое содержимое.
  • WP Popups — легкий плагин с возможностью подключения AJAX для различных целей.

Если у вас простой кейс и вы хотите контролировать процесс, лучше написать собственное решение, что мы и сделаем ниже.

Создаем простой плагин для динамического popup с AJAX

1. Регистрация скриптов и локализация данных

Начнем с подключения JavaScript, который будет обрабатывать вызов popup и AJAX-запросы.

<?php
function wppopup_enqueue_scripts() {
    wp_enqueue_script('wppopup-ajax', plugin_dir_url(__FILE__) . 'js/wppopup.js', array('jquery'), '1.0', true);
    wp_localize_script('wppopup-ajax', 'wppopup_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wppopup_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wppopup_enqueue_scripts');
?>

Этот код подключает скрипт wppopup.js и передает в него URL для AJAX-запросов и nonce для безопасности.

2. JavaScript для открытия popup и отправки AJAX-запроса

Создадим файл js/wppopup.js с таким содержанием:

jQuery(document).ready(function($) {
    $('.wppopup-open').on('click', function(e) {
        e.preventDefault();
        var popupId = $(this).data('popup-id');
        $.ajax({
            url: wppopup_ajax_obj.ajax_url,
            type: 'POST',
            data: {
                action: 'wppopup_load_content',
                popup_id: popupId,
                nonce: wppopup_ajax_obj.nonce
            },
            success: function(response) {
                if(response.success) {
                    $('body').append('<div class="wppopup-overlay">' +
                        '<div class="wppopup-content">' + response.data.content +
                        '<button class="wppopup-close">Закрыть</button>' +
                        '</div></div>');
                } else {
                    alert('Ошибка загрузки popup.');
                }
            }
        });
    });

    $(document).on('click', '.wppopup-close, .wppopup-overlay', function() {
        $('.wppopup-overlay').remove();
    });

    $(document).on('click', '.wppopup-content', function(e) {
        e.stopPropagation();
    });
});

Этот скрипт слушает клики по элементам с классом wppopup-open, отправляет AJAX-запрос с ID popup, получает содержимое и отображает его поверх страницы. Также реализована возможность закрытия popup по клику вне содержимого или кнопке.

3. Обработка AJAX-запроса на сервере

Теперь создадим обработчик AJAX-запроса в PHP:

function wppopup_ajax_load_content() {
    check_ajax_referer('wppopup_nonce', 'nonce');

    $popup_id = intval($_POST['popup_id']);
    if(!$popup_id) {
        wp_send_json_error('Неверный ID popup');
    }

    // Здесь можно получить содержимое из базы данных или другого источника
    // Для примера вернем простой HTML
    $content = '<h2>Popup с ID ' . $popup_id . '</h2><p>Динамически загруженное содержимое для popup.</p>';

    wp_send_json_success(array('content' => $content));
}
add_action('wp_ajax_wppopup_load_content', 'wppopup_ajax_load_content');
add_action('wp_ajax_nopriv_wppopup_load_content', 'wppopup_ajax_load_content');

Обработчик проверяет nonce, принимает ID popup, формирует содержимое и возвращает его в формате JSON.

Добавление кнопок вызова popup на страницу

Чтобы вызвать popup, достаточно добавить на страницу кнопку или ссылку с классом wppopup-open и атрибутом data-popup-id с нужным ID.

Пример:

<a href="#" class="wppopup-open" data-popup-id="1">Открыть popup 1</a>
<a href="#" class="wppopup-open" data-popup-id="2">Открыть popup 2</a>

Можно добавлять такие ссылки в любом месте темы, виджетах или контенте.

Настройка стилей для popup

Для корректного отображения popup добавим CSS:

.wppopup-overlay {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    background: rgba(0,0,0,0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 9999;
}
.wppopup-content {
    background: #fff;
    padding: 20px;
    border-radius: 8px;
    max-width: 500px;
    max-height: 80vh;
    overflow-y: auto;
    position: relative;
}
.wppopup-close {
    position: absolute;
    top: 10px;
    right: 10px;
    background: #f44336;
    border: none;
    color: #fff;
    padding: 5px 10px;
    cursor: pointer;
    border-radius: 3px;
}

Этот стиль затемняет фон, центрирует окно и добавляет кнопку закрытия.

Расширение функционала: загрузка контента из кастомных полей

Если вы используете Advanced Custom Fields (ACF) или свои метаполя для хранения содержимого popup, то можно динамически подгружать именно их.

Пример PHP-кода для загрузки содержимого из кастомного поля 'wppopup_content':

$content = get_post_meta($popup_id, 'wppopup_content', true);
if(!$content) {
    $content = '<p>Содержимое отсутствует.</p>';
}

Это позволит создавать уникальные popup для разных записей или страниц.

Заключение по созданию динамических popup

Использование AJAX для загрузки popup в WordPress значительно улучшает производительность и пользовательский опыт. Вы можете расширять пример, интегрируя формы, видео, или сложный HTML, а также добавлять различные триггеры для открытия popup — по времени, прокрутке или клику.

Такой подход особенно актуален для сайтов, где важно не нагружать страницу лишним контентом, но при этом своевременно привлекать внимание посетителей к важной информации.

Создание динамических popup в WordPress с помощью AJAX
13.11.2025
Как отключить popup на определённых страницах WordPress
13.12.2025
Как создать popup с отключением по IP в WordPress
15.04.2026
Как создать popup с отключением по рефереру в WordPress
26.03.2026
Как создать выпадающее меню в WordPress с помощью JavaScript
20.11.2025