Как создать динамический блок с Ajax в WordPress

В этой статье мы подробно рассмотрим, как добавить динамический блок на страницу WordPress, который обновляется без перезагрузки страницы с помощью Ajax. Такой функционал часто необходим для интерактивных элементов, например, фильтров товаров, комментариев, форм поиска и других частей сайта, которые требуют асинхронного обновления.

Что такое Ajax и почему он важен в WordPress

Ajax (Asynchronous JavaScript and XML) — технология, позволяющая обмениваться данными с сервером без перезагрузки страницы. В WordPress это особенно полезно, чтобы улучшить UX, снизить нагрузку и сделать интерфейс более отзывчивым.

WordPress имеет встроенный механизм для работы с Ajax через файл admin-ajax.php. Это упрощает создание безопасных и оптимальных запросов.

Основные шаги создания динамического блока с Ajax

Процесс можно разбить на несколько этапов:

  • Создание HTML-разметки блока.
  • Подключение JavaScript, отправляющего Ajax-запросы.
  • Обработка Ajax-запроса на сервере (PHP-функция).
  • Отправка ответа и обновление контента на странице.

Рассмотрим каждый шаг более подробно с примерами.

HTML-разметка динамического блока

Допустим, мы хотим создать блок, который по нажатию кнопки будет подгружать случайный совет из базы данных:

<div id="wpdir-ajax-block">
  <div id="wpdir-advice">Нажмите кнопку, чтобы получить совет</div>
  <button id="wpdir-get-advice">Получить совет</button>
</div>

Этот блок можно добавить в шаблон темы или в контент через shortcode.

Подключение JavaScript для отправки Ajax-запроса

Создадим JS-файл wpdir-ajax.js, который будет отправлять запрос и обновлять содержимое блока:

jQuery(document).ready(function($) {
  $('#wpdir-get-advice').on('click', function() {
    $.ajax({
      url: wpdir_ajax_object.ajax_url,
      type: 'POST',
      data: {
        action: 'wpdir_get_random_advice'
      },
      success: function(response) {
        $('#wpdir-advice').html(response.data);
      },
      error: function() {
        $('#wpdir-advice').html('Ошибка при получении данных');
      }
    });
  });
});

Важно: для работы Ajax в WordPress нужно локализовать скрипт, чтобы передать URL для запросов.

Подключение и локализация скрипта в WordPress

Добавим следующий код в functions.php или в файл плагина:

function wpdir_enqueue_scripts() {
  wp_enqueue_script('wpdir-ajax-script', get_template_directory_uri() . '/js/wpdir-ajax.js', array('jquery'), null, true);
  wp_localize_script('wpdir-ajax-script', 'wpdir_ajax_object', array(
    'ajax_url' => admin_url('admin-ajax.php')
  ));
}
add_action('wp_enqueue_scripts', 'wpdir_enqueue_scripts');

Этот код подключает наш JS и передает ему объект с адресом для Ajax-запросов.

Обработка Ajax-запроса в PHP

Теперь нужно создать PHP-функцию, которая будет вызываться при Ajax-запросе. Она выберет случайный совет из массива или базы данных и отправит его обратно:

function wpdir_get_random_advice() {
  $advices = array(
    'Не забывайте регулярно обновлять WordPress.',
    'Используйте дочерние темы для кастомизации.',
    'Проверяйте совместимость плагинов после обновлений.',
    'Всегда делайте резервные копии сайта.',
    'Оптимизируйте изображения для быстрой загрузки.'
  );
  $random_advice = $advices[array_rand($advices)];
  wp_send_json_success($random_advice);
}
add_action('wp_ajax_wpdir_get_random_advice', 'wpdir_get_random_advice');
add_action('wp_ajax_nopriv_wpdir_get_random_advice', 'wpdir_get_random_advice');

Обратите внимание, что мы подключаем функцию и для авторизованных пользователей, и для гостей, используя wp_ajax_ и wp_ajax_nopriv_.

Расширение функционала: динамическая загрузка данных из базы

В реальном проекте советы могут храниться в таблице базы данных или в пользовательском типе записей. Рассмотрим пример выбора случайного совета из пользовательского типа записи advice.

function wpdir_get_random_advice_db() {
  $args = array(
    'post_type' => 'advice',
    'posts_per_page' => 1,
    'orderby' => 'rand',
  );
  $query = new WP_Query($args);
  if ($query->have_posts()) {
    $query->the_post();
    $content = get_the_content();
    wp_reset_postdata();
    wp_send_json_success($content);
  } else {
    wp_send_json_error('Советы не найдены');
  }
}
add_action('wp_ajax_wpdir_get_random_advice', 'wpdir_get_random_advice_db');
add_action('wp_ajax_nopriv_wpdir_get_random_advice', 'wpdir_get_random_advice_db');

Для этого нужно заранее зарегистрировать тип записи advice и добавить несколько записей с советами.

Советы по безопасности и оптимизации Ajax-запросов в WordPress

При работе с Ajax важно учитывать несколько моментов:

  • Проверка прав доступа — если данные должны быть доступны только авторизованным пользователям, используйте соответствующие хуки.
  • Использование nonce — для защиты от CSRF-атак добавьте nonce в запросы и проверяйте их на сервере.
  • Кеширование — если данные редко меняются, можно кешировать ответы для снижения нагрузки.
  • Обработка ошибок — предусмотрите информирование пользователя при сбоях.

Пример добавления nonce в наш предыдущий код:

function wpdir_enqueue_scripts() {
  wp_enqueue_script('wpdir-ajax-script', get_template_directory_uri() . '/js/wpdir-ajax.js', array('jquery'), null, true);
  wp_localize_script('wpdir-ajax-script', 'wpdir_ajax_object', array(
    'ajax_url' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('wpdir_nonce')
  ));
}
add_action('wp_enqueue_scripts', 'wpdir_enqueue_scripts');
jQuery(document).ready(function($) {
  $('#wpdir-get-advice').on('click', function() {
    $.ajax({
      url: wpdir_ajax_object.ajax_url,
      type: 'POST',
      data: {
        action: 'wpdir_get_random_advice',
        security: wpdir_ajax_object.nonce
      },
      success: function(response) {
        if(response.success) {
          $('#wpdir-advice').html(response.data);
        } else {
          $('#wpdir-advice').html('Ошибка: ' + response.data);
        }
      },
      error: function() {
        $('#wpdir-advice').html('Ошибка при получении данных');
      }
    });
  });
});
function wpdir_get_random_advice() {
  check_ajax_referer('wpdir_nonce', 'security');
  // ... остальной код функции ...
}

Заключение

Создание динамических блоков с помощью Ajax в WordPress — мощный способ улучшить интерактивность сайта. В статье мы рассмотрели полный цикл от HTML и JS до PHP-обработчика с примером на реальных данных. Используйте приведённые подходы и шаблоны для разработки собственных решений.

WooCommerce: автоматическое удаление товаров при нулевом остатке и без вариаций
15.06.2026
Как создать адаптивный плагин WordPress с настройками
09.11.2025
Оптимизация базы данных WordPress: практические советы и примеры
17.11.2025
WooCommerce: автоматическое изменение цены при низком остатке товара
27.06.2026
Как динамически изменить автозаголовки записей в WordPress
09.04.2026