Вопрос или проблема
У меня есть сайт с пользовательским постом. Когда я захожу в админку (страница редактирования) этого пользовательского поста, отображается форма. Эта форма загружается примерно за 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 в ваш проект.