Автоматическое сохранение (autosave) — одна из ключевых функций WordPress, которая позволяет минимизировать риск потери данных при создании и редактировании записей. В этой статье мы подробно разберём, как работает этот механизм, как его можно расширить и оптимизировать с помощью собственного кода и плагина WP7.
Что такое автосейв в WordPress и зачем он нужен
Автосейв — это автоматический процесс, при котором WordPress периодически сохраняет черновик вашей записи или страницы без вашего вмешательства. Это помогает избежать потери контента при случайном закрытии вкладки, падении браузера или перебоях с интернетом.
По умолчанию WordPress сохраняет автосейв каждые 60 секунд. Все эти сохранения хранятся в базе данных в виде отдельного типа записи, что позволяет вернуться к предыдущей версии, если что-то пошло не так.
Как работает автоматическое сохранение на уровне кода
В ядре WordPress автосейв реализован через JavaScript и AJAX-запросы, которые отправляются на сервер с регулярным интервалом.
Основные компоненты:
- JavaScript-функция, которая запускает AJAX-запросы;
- PHP-хук
wp_ajax_autosave, который обрабатывает запросы на сервере; - Объект записи
WP_Post, в который сохраняются данные автосейва; - Вспомогательные функции для проверки прав пользователя и предотвращения конфликтов.
Пример расширения автосейва на стороне сервера (WP7)
Предположим, мы хотим контролировать процесс автосейва и добавить логирование при каждом сохранении. Для этого создадим функцию wp7_handle_autosave и подключим её к AJAX-хуку.
function wp7_handle_autosave() {
if ( ! isset( \$_POST['post_ID'] ) ) {
wp_send_json_error('Post ID missing');
}
$post_id = intval( \$_POST['post_ID'] );
// Проверяем права пользователя
if ( ! current_user_can('edit_post', $post_id) ) {
wp_send_json_error('No permission');
}
// Получаем данные из запроса
$content = isset( \$_POST['content'] ) ? wp_kses_post( \$_POST['content'] ) : '';
// Логируем данные (например, в отдельный файл)
error_log('WP7 Autosave for post '. $post_id .': '. $content);
// Сохраняем автосейв
$post_data = array(
'ID' => $post_id,
'post_content' => $content,
'post_status' => 'autosave'
);
wp_update_post($post_data);
wp_send_json_success('Autosave completed');
}
add_action('wp_ajax_wp7_autosave', 'wp7_handle_autosave');Этот пример показывает, как можно перехватить процесс автосейва, добавить в него логику проверки и кастомного поведения.
Как настроить интервал автосейва и его отключение
Иногда 60 секунд — слишком часто, и это может создавать нагрузку на сервер, особенно если у вас большой сайт с множеством одновременно редактирующих пользователей. Можно изменить этот интервал или вовсе отключить автосейв.
Изменение интервала автосейва
Для этого добавьте следующий код в файл functions.php вашей темы или плагина:
function wp7_change_autosave_interval() {
return 300; // Интервал в секундах, здесь 5 минут
}
add_filter('autosave_interval', 'wp7_change_autosave_interval');Это увеличит интервал автосейва до 5 минут, что снизит нагрузку на сервер.
Отключение автосейва
Если по какой-то причине вы хотите отключить автосейв, например, при использовании собственного механизма, добавьте:
function wp7_disable_autosave() {
wp_deregister_script('autosave');
}
add_action('wp_print_scripts', 'wp7_disable_autosave');Однако будьте осторожны — отключение автосейва повышает риск потери данных.
Использование плагина WP7 для расширения автосейва
Плагин WP7 позволяет не только контролировать автосейв, но и настраивать дополнительные параметры, такие как:
- Автоматическое восстановление последней версии при сбоях;
- Логирование изменений для аудита;
- Настройка автосейва для кастомных типов записей;
- Интеграция с WP7 AJAX для мгновенного сохранения изменений.
Для настройки достаточно установить плагин и перейти в его параметры, где можно задать интервал, включить уведомления и просматривать историю изменений.
Практические рекомендации по работе с автосейвом
Чтобы автосейв работал эффективно и не создавал проблем, руководствуйтесь несколькими простыми правилами:
- Увеличьте интервал автосейва, если сайт нагружен.
- Используйте плагины для расширенного логирования и контроля.
- Избегайте отключения автосейва без веских причин.
- При создании кастомных типов записей учитывайте поддержку автосейва.
- Проверяйте права пользователя перед сохранением.
Пример поддержки автосейва для кастомного типа записи
Если вы создаёте собственный тип записи, убедитесь, что он поддерживает автосейв. Вот пример регистрации типа записи с включённой поддержкой:
function wp7_register_custom_post_type() {
$args = array(
'label' => 'Проекты',
'public' => true,
'supports' => array('title', 'editor', 'revisions', 'autosave'),
);
register_post_type('project', $args);
}
add_action('init', 'wp7_register_custom_post_type');Это позволит WordPress автоматически сохранять автосейвы для типа записи project.
Заключение
Автоматическое сохранение — это фундаментальный элемент удобства работы с WordPress. Используя возможности ядра и расширяя их с помощью плагина WP7 и собственного кода, вы можете добиться максимальной надежности и гибкости в управлении контентом. Правильная настройка автосейва снижает риск потери данных и улучшает опыт пользователей вашего сайта.