Как создать автоматический фидер новостей в WordPress с помощью AJAX

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

Почему стоит использовать AJAX для фидера новостей

Традиционная загрузка новой порции новостей требует полной перезагрузки страницы, что ухудшает пользовательский опыт и увеличивает нагрузку на сервер. AJAX позволяет загружать данные асинхронно, без обновления страницы, что даёт несколько преимуществ:

  • Быстрая загрузка контента без мерцаний и пауз.
  • Удобство для посетителей — можно подгружать новости по мере прокрутки.
  • Снижение нагрузки на сервер за счёт выборочной подгрузки.

Реализуем это на примере собственного кода и разберём, как подключить AJAX в WordPress правильно.

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

Для начала нам нужно зарегистрировать AJAX-обработчик на стороне сервера. В WordPress это делается с помощью действий wp_ajax_ и wp_ajax_nopriv_ для авторизованных и неавторизованных пользователей соответственно.

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

add_action('wp_ajax_wpnews_load_more_news', 'wpnews_load_more_news_callback');
add_action('wp_ajax_nopriv_wpnews_load_more_news', 'wpnews_load_more_news_callback');

function wpnews_load_more_news_callback() {
    // Получаем номер текущей страницы из AJAX-запроса
    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;

    // Запрос новостей (записи типа 'post') с пагинацией
    $args = [
        'post_type' => 'post',
        'posts_per_page' => 5,
        'paged' => $paged,
        'post_status' => 'publish',
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            ?>
            <article class="news-item">
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                <div class="news-excerpt"><?php the_excerpt(); ?></div>
            </article>
            <?php
        }
    } else {
        echo '<p>Новостей больше нет.</p>';
    }

    wp_reset_postdata();
    wp_die(); // Завершаем AJAX-запрос
}

Этот код обрабатывает AJAX-запрос, получает параметр page и возвращает HTML-содержимое следующих 5 новостей.

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

Теперь нужно на стороне клиента написать скрипт, который будет отправлять AJAX-запросы при нажатии на кнопку или при прокрутке страницы. Для простоты используем кнопку "Загрузить еще".

Добавьте этот код в файл JavaScript вашей темы или подключите отдельный скрипт:

jQuery(document).ready(function($) {
    var page = 2; // Уже загружена первая страница
    $('#load-more-news').on('click', function() {
        var button = $(this);
        button.text('Загрузка...');

        $.ajax({
            url: wpnews_ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'wpnews_load_more_news',
                page: page
            },
            success: function(response) {
                if(response.trim() === '<p>Новостей больше нет.</p>') {
                    button.text('Новостей больше нет');
                    button.prop('disabled', true);
                } else {
                    $('#news-container').append(response);
                    button.text('Загрузить еще');
                    page++;
                }
            },
            error: function() {
                button.text('Ошибка загрузки');
            }
        });
    });
});

Не забудьте локализовать скрипт в functions.php, чтобы передать URL для AJAX:

function wpnews_enqueue_scripts() {
    wp_enqueue_script('wpnews-ajax-script', get_template_directory_uri() . '/js/wpnews-ajax.js', ['jquery'], null, true);

    wp_localize_script('wpnews-ajax-script', 'wpnews_ajax_object', [
        'ajax_url' => admin_url('admin-ajax.php'),
    ]);
}
add_action('wp_enqueue_scripts', 'wpnews_enqueue_scripts');

Разметка и кнопка загрузки новостей

В шаблоне темы добавьте контейнер для новостей и кнопку:

<div id="news-container">
    <?php
    // Выводим первые 5 новостей при загрузке страницы
    $args = [
        'post_type' => 'post',
        'posts_per_page' => 5,
        'paged' => 1,
        'post_status' => 'publish',
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post(); ?>
            <article class="news-item">
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                <div class="news-excerpt"><?php the_excerpt(); ?></div>
            </article>
            <?php
        }
    }
    wp_reset_postdata();
    ?>
</div>
<button id="load-more-news">Загрузить еще</button>

Дополнительные советы по улучшению фидера новостей

Использование плагинов для автоматизации

Если хочется более продвинутых функций, можно использовать плагины, например, ABC Pagination — он позволяет легко реализовать AJAX пагинацию и подгрузку контента без кода.

Оптимизация запросов и кэширование

Для больших сайтов рекомендуется кешировать результаты AJAX-запросов с помощью Clearfy Pro или встроенных transient API, чтобы снизить нагрузку на базу данных.

Безопасность AJAX-запросов

Обязательно добавляйте nonce-проверки для AJAX в WordPress, чтобы защититься от CSRF-атак. В примере для упрощения мы их не показали, но для продакшена это важно.

Итоги

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

Как создать автоматические уведомления о новостях в WordPress
10.03.2026
Как использовать Hooks в WordPress для расширения функциональности
12.11.2025
Как использовать WordPress Hooks для защиты от спама
26.02.2026
Как использовать WP-Cron для автоматизации задач в WordPress
20.02.2026
Как удалить все комментарии с одного поста в WordPress
06.12.2025