Можно ли подключить AJAX к кнопке ОБНОВИТЬ?

Вопрос или проблема

У меня есть сайт с пользовательским постом. Когда я захожу в админку (страница редактирования) этого пользовательского поста, отображается форма. Эта форма загружается примерно за 2-3 секунды – в ней много значений – как скрытых, так и открытых.

Когда я обновляю этот пользовательский пост, обновление занимает около 2 секунд – а после обновления происходит редирект на пользовательский пост, и форма загружается снова, так что в целом это может занять около 8-9 секунд (регенерация меню, некоторые другие элементы, которые загружаются каждый раз в области wp-admin).

Мой вопрос: есть ли способ просто сохранить данные поста при обновлении – например, подключив AJAX-вызов к кнопке ОБНОВИТЬ (мне действительно не нужно перезагружать страницу, так как это ничего не меняет)?

ОБНОВЛЕНИЕ:
Я думаю, я мог бы сделать что-то вроде этого (на jQuery)

$( '#publish' ).click( function( e ) {
    e.preventDefault();
    //ajax вызов для сохранения текущего поста и т.д.
    //done = alert('пост сохранен');
} );

но будет ли это правильным?

Если всё, что вы хотите сделать, это сохранить дополнительные данные поста, вам не нужно использовать jQuery или кастомный AJAX. В WordPress есть встроенное действие, которое вы можете использовать для достижения той же цели.

add_action( 'save_post', 'save_more_post_meta' );
function save_more_post_meta( $post_id ) {
    //сохранить данные здесь
}

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

Ответ или решение

Да, возможно интегрировать AJAX-вызов с кнопкой «Обновить» в вашем админ-панели WordPress для ускоренной обработки сохранения данных ваших пользовательских постов. Давайте рассмотрим, как это можно сделать, подробно описывая процессы и подходы.

1. Зачем использовать AJAX для обновления поста?

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

2. Как реализовать AJAX-запрос при клике на кнопку «Обновить»?

Вы можете определить обработчик события для кнопки «Обновить» (обычно это кнопка с ID #publish), чтобы инициировать AJAX-запрос на сохранение данных поста без перезагрузки страницы.

Вот пример кода на JavaScript с использованием jQuery:

jQuery(document).ready(function($) {
    $('#publish').click(function(e) {
        e.preventDefault();

        // Собрать данные формы, которые нужно отправить
        var formData = $('#your_form_id').serialize(); // Замените your_form_id на реальный ID вашей формы

        // Отправка AJAX-запроса
        $.ajax({
            type: 'POST',
            url: '/wp-admin/admin-ajax.php',
            data: {
                action: 'save_post_data', // Ваш собственный AJAX-действие
                data: formData
            },
            success: function(response) {
                alert('Пост успешно сохранён!');
                // Здесь вы можете добавить другие действия,
                // такие как обновление пользовательского интервейса
            },
            error: function(xhr, status, error) {
                alert('Ошибка при сохранении: ' + error);
            }
        });
    });
});

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

Вам необходимо зарегистрировать AJAX-действие в вашем файле functions.php для обработки запроса. Вот пример того, как это сделать:

add_action('wp_ajax_save_post_data', 'save_post_data');

function save_post_data() {
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_send_json_error('Недостаточно прав для выполнения этого действия');
    }

    // Получение данных из AJAX-запроса
    parse_str($_POST['data'], $post_data);

    // Обработка сохранения данных поста
    $post_id = intval($post_data['post_id']); // Получите ID поста из переданных данных
    $updated = wp_update_post(array(
        'ID'           => $post_id,
        // дополнительные поля
    ));

    if (is_wp_error($updated)) {
        wp_send_json_error('Не удалось сохранить пост');
    } else {
        wp_send_json_success('Пост успешно сохранён');
    }

    wp_die(); // Завершает выполнение AJAX-запроса
}

4. Примечания

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

Заключение

Вопрос о том, возможно ли подключить AJAX к кнопке «Обновить», имеет положительный ответ. Применение AJAX не только упростит работу с пользовательскими постами, но и существенно повысит скорость загрузки и взаимодействия с вашей админ-панелью. Важно соблюдать все шаги, от настройки JavaScript до обработки на серверной стороне, чтобы обеспечить успешную интеграцию AJAX в ваш проект.

Оцените материал
Добавить комментарий

Капча загружается...