Удаление записей в WordPress через AJAX без перезагрузки страницы

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

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

Удаление записей через AJAX позволяет:

  • Сделать интерфейс более отзывчивым и современным;
  • Избежать полной перезагрузки страницы, что экономит время пользователей;
  • Уменьшить нагрузку на сервер, так как отправляется только необходимый запрос;
  • Обеспечить динамическое обновление списка записей без дополнительной работы.

При правильной реализации это значительно улучшает UX, особенно если у вас есть кастомные списки или интерактивные элементы на фронтенде.

Обеспечение безопасности при удалении записей через AJAX

Безопасность — главный аспект при работе с любыми AJAX-запросами, которые изменяют данные. В WordPress это достигается с помощью nonce-проверок и проверки прав пользователя.

Основные шаги безопасности:

  • Использовать wp_create_nonce для генерации одноразового ключа;
  • Передавать nonce вместе с AJAX-запросом;
  • Проверять nonce в обработчике с помощью check_ajax_referer;
  • Проверять, имеет ли текущий пользователь права на удаление записей (например, current_user_can('delete_posts'));
  • Обрабатывать ошибки и отправлять понятные ответы клиенту.

Пример реализации удаления записей по AJAX в WordPress

1. Подключение скрипта и локализация данных

Для начала нужно зарегистрировать и подключить JavaScript-файл, который будет отправлять AJAX-запросы, и передать в него URL для AJAX и nonce.

function journalx_enqueue_scripts() {
    wp_enqueue_script( 'journalx-ajax-delete', get_template_directory_uri() . '/js/ajax-delete.js', array('jquery'), null, true );
    wp_localize_script( 'journalx-ajax-delete', 'journalx_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('journalx_delete_post_nonce')
    ) );
}
add_action( 'wp_enqueue_scripts', 'journalx_enqueue_scripts' );

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

В файле ajax-delete.js напишем код, который будет отправлять запрос на удаление.

jQuery(document).ready(function($) {
    $('.journalx-delete-post').on('click', function(e) {
        e.preventDefault();
        var postID = $(this).data('postid');
        if (!confirm('Вы действительно хотите удалить эту запись?')) return;

        $.ajax({
            url: journalx_ajax.ajax_url,
            type: 'POST',
            data: {
                action: 'journalx_delete_post',
                post_id: postID,
                nonce: journalx_ajax.nonce
            },
            success: function(response) {
                if(response.success) {
                    alert('Запись успешно удалена');
                    $('#post-' + postID).fadeOut();
                } else {
                    alert('Ошибка: ' + response.data);
                }
            },
            error: function() {
                alert('Произошла ошибка при запросе');
            }
        });
    });
});

3. PHP-обработчик AJAX-запроса

Обрабатываем запрос на сервере, проверяем nonce и права пользователя, затем удаляем запись.

function journalx_ajax_delete_post() {
    check_ajax_referer('journalx_delete_post_nonce', 'nonce');

    $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
    if (!$post_id) {
        wp_send_json_error('Неверный ID записи');
    }

    if (!current_user_can('delete_post', $post_id)) {
        wp_send_json_error('У вас нет прав для удаления этой записи');
    }

    $deleted = wp_delete_post($post_id, true); // true — без перемещения в корзину
    if ($deleted) {
        wp_send_json_success();
    } else {
        wp_send_json_error('Не удалось удалить запись');
    }
}
add_action('wp_ajax_journalx_delete_post', 'journalx_ajax_delete_post');
// Если планируете использовать на фронтенде для неавторизованных, добавьте wp_ajax_nopriv_ хук с осторожностью.

Примеры плагинов для AJAX-удаления записей

Если вы хотите использовать готовые решения, есть несколько плагинов, которые реализуют удаление через AJAX или расширяют функционал списков записей:

  • WP Ajaxify Comments — позволяет AJAX-удаление комментариев, может быть расширен для записей;
  • Admin Columns — расширяет таблицы записей, поддерживает AJAX-операции;
  • Advanced Custom Fields (ACF) — с помощью ACF и AJAX можно создать собственный интерфейс для управления записями.

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

Советы по улучшению UX при удалении записей через AJAX

Чтобы сделать интерфейс более удобным:

  • Используйте модальные окна для подтверждения удаления;
  • Добавьте индикатор загрузки или анимацию, чтобы пользователь видел процесс;
  • Обновляйте список записей динамически без перезагрузки;
  • Обрабатывайте ошибки красиво, показывая подробные сообщения;
  • Поддерживайте возможность восстановления записи, если это необходимо.

Такие мелочи значительно повышают доверие и комфорт при работе с сайтом.

Как расширить функционал: удаление кастомных типов записей и метаданных

Если у вас есть кастомные типы записей (Custom Post Types), AJAX-удаление можно легко адаптировать под них. Главное — проверить права с помощью current_user_can('delete_post', $post_id) работает и для кастомных типов.

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

Например, удаление связанных метаданных:

global $wpdb;
$wpdb->delete($wpdb->postmeta, array('post_id' => $post_id));

Это позволит избежать «мусора» в базе данных и поддерживать её в порядке.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматизировать создание резервных копий WordPress с помощью плагинов и кода
05.11.2025
Как удалить текст из визуального редактора WordPress без оставшихся пустых страниц
09.12.2025
Как отключить автоматическое проставление пагинации в WordPress
01.01.2026
Как удалить параметры URL в WordPress без перезагрузки страницы
28.12.2025
WooCommerce: удаление товаров из корзины через AJAX с подтверждением пользователя
18.05.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙