Автоматическое сохранение изменений — важная функция для любого современного сайта на WordPress, особенно если вы работаете с кастомными типами записей (custom post types). В стандартном редакторе WordPress autosave встроен, но для кастомных типов записей часто требуется дополнительная настройка или реализация собственного механизма, который поможет не потерять данные при сбоях или случайном закрытии браузера.
Почему важно реализовать автоматическое сохранение для кастомных типов записей
Кастомные типы записей (CPT) позволяют создавать разнообразный контент, выходящий за рамки стандартных записей и страниц. Например, это могут быть отзывы, портфолио, товары, события и так далее. При работе с такими данными пользователям важно, чтобы внесённые изменения не терялись из-за сбоев, ошибок или случайных закрытий вкладки.
Стандартный autosave WordPress работает только в классическом и блоковом редакторе для постов и страниц. Для кастомных типов записей, особенно если они имеют собственные метабоксы или сложные поля, требуется либо адаптация стандартного механизма, либо создание кастомного автосохранения.
Без автосохранения пользователи рискуют потерять много времени и данных, что негативно сказывается на удобстве и стабильности работы сайта.
Как работает стандартное автосохранение WordPress
В ядре WordPress есть встроенный механизм autosave, который сохраняет текущие изменения каждые 60 секунд в специальный пост типа 'revision'. Это позволяет восстановить незавершённую работу при повторном открытии редактора.
Однако для кастомных типов записей этот механизм может не работать корректно из-за отсутствия поддержки ревизий или особенностей интерфейса. Поэтому рассмотрим, как расширить функциональность для CPT.
Проверка поддержки ревизий для кастомного типа записи
При регистрации кастомного типа записи нужно обязательно включить поддержку ревизий, чтобы autosave мог работать. Например:
function wpboard_register_custom_post_type() {
register_post_type('review', [
'label' => 'Отзывы',
'public' => true,
'supports' => ['title', 'editor', 'revisions', 'custom-fields'],
'show_in_rest' => true // Для поддержки редактора Gutenberg
]);
}
add_action('init', 'wpboard_register_custom_post_type');Обратите внимание на параметр 'revisions' в supports. Без него WordPress не будет сохранять ревизии, а значит, и autosave не сработает.
Реализация кастомного автосохранения для метаполей кастомного типа записи
Если ваш кастомный тип записи содержит дополнительные метаполя (custom fields), которые редактируются через метабоксы, стандартное autosave не сохраняет их автоматически. Для этого требуется написать собственный JavaScript и PHP код, который будет сохранять данные по AJAX.
Пример реализации autosave для метаполей
Добавим JavaScript, который будет отправлять данные на сервер каждые 30 секунд:
function wpboard_enqueue_autosave_script($hook) {
if ('post.php' !== $hook && 'post-new.php' !== $hook) {
return;
}
global $post;
if ($post->post_type !== 'review') {
return;
}
wp_enqueue_script('wpboard-autosave', plugin_dir_url(__FILE__) . 'js/autosave.js', ['jquery'], '1.0', true);
wp_localize_script('wpboard-autosave', 'wpboardAutosave', [
'ajax_url' => admin_url('admin-ajax.php'),
'post_id' => $post->ID,
'nonce' => wp_create_nonce('wpboard_autosave_nonce')
]);
}
add_action('admin_enqueue_scripts', 'wpboard_enqueue_autosave_script');Создадим файл js/autosave.js с таким содержанием:
jQuery(document).ready(function($) {
setInterval(function() {
var metaValue = $('#wpboard_custom_meta_field').val();
$.post(wpboardAutosave.ajax_url, {
action: 'wpboard_autosave_meta',
post_id: wpboardAutosave.post_id,
meta_value: metaValue,
nonce: wpboardAutosave.nonce
}, function(response) {
if(response.success) {
console.log('Данные автосохранены');
} else {
console.log('Ошибка автосохранения');
}
});
}, 30000); // Каждые 30 секунд
});Далее добавим PHP обработчик AJAX запроса:
function wpboard_handle_autosave_meta() {
check_ajax_referer('wpboard_autosave_nonce', 'nonce');
$post_id = intval($_POST['post_id']);
$meta_value = sanitize_text_field($_POST['meta_value']);
if (!current_user_can('edit_post', $post_id)) {
wp_send_json_error('Нет прав');
}
update_post_meta($post_id, '_wpboard_custom_meta', $meta_value);
wp_send_json_success();
}
add_action('wp_ajax_wpboard_autosave_meta', 'wpboard_handle_autosave_meta');Таким образом, каждую 30 секунд значение метаполя будет сохраняться без необходимости ручного сохранения поста.
Использование плагинов для расширенного автосохранения
Если вы не хотите писать код с нуля, существуют плагины, которые расширяют функциональность автосохранения в WordPress:
- Autosave Manager — позволяет настроить интервал автосохранения и поддерживает кастомные типы записей.
- WP Revisions Control — управляет ревизиями и автосохранением для любых типов записей.
- Advanced Custom Fields (ACF) — при правильной настройке ACF и совместимых с ним плагинов можно обеспечить автоматическое сохранение метаполей.
Для интеграции с этими плагинами иногда требуется дополнительная настройка, но они значительно упрощают работу.
Интеграция с плагином Clearfy Pro для оптимизации автосохранения
Плагин Clearfy Pro позволяет управлять поведением автосохранения, отключать лишние запросы и оптимизировать производительность сайта при активном использовании autosave, что особенно полезно при большом количестве кастомных типов записей.
Советы по оптимизации и безопасности автосохранения
При реализации автоматического сохранения важно учитывать нагрузку на сервер и безопасность данных.
- Интервал автосохранения — не делайте его слишком коротким, 30–60 секунд — оптимальный вариант.
- Проверка прав — всегда проверяйте права пользователя при сохранении данных через AJAX.
- Санитизация данных — обязательно очищайте входящие данные перед сохранением.
- Отладка — используйте консоль браузера и логи сервера для проверки работы автосохранения.
Эти рекомендации помогут сделать автосохранение надёжным и не нагружающим систему.
Выводы и рекомендации
Автоматическое сохранение для кастомных типов записей — не роскошь, а необходимость для современных проектов на WordPress. Используя поддержку ревизий, кастомные AJAX-решения и проверенные плагины, вы сможете защитить данные пользователей и улучшить UX сайта.
Если хотите быстро и без ошибок реализовать автосохранение, советуем обратить внимание на плагины с поддержкой кастомных типов записей и интеграцию с Clearfy Pro для оптимизации.