Почему автосохранение важно для кастомных типов постов
Автосохранение в WordPress помогает предотвратить потерю данных при редактировании записей. Для стандартных постов и страниц эта функция включена по умолчанию. Но если вы создаёте кастомный тип поста (Custom Post Type, CPT) с собственными параметрами, автосохранение может не работать из-за отсутствия поддержки или неправильных настроек. В результате пользователь рискует потерять изменения при сбоях или случайном закрытии вкладки.
Диагностика: как проверить, работает ли автосохранение для CPT
- Откройте редактор записи кастомного типа поста.
- Внесите изменения в содержимое и не нажимайте кнопку «Обновить».
- Подождите около 1-2 минут, чтобы сработал интервал автосохранения.
- Обновите страницу, не сохраняя изменения.
- Если изменения пропали, значит автосохранение не работает.
Также можно проверить сетевые запросы в консоли браузера (Network) на наличие AJAX-запросов к admin-ajax.php?action=autosave при редактировании CPT.
Пошаговое решение: включаем автосохранение для кастомных типов постов
1. Добавьте поддержку 'editor' и 'custom-fields' в регистрацию CPT
register_post_type('my_cpt', array(
'label' => 'Мой CPT',
'public' => true,
'supports' => array('title', 'editor', 'custom-fields', 'revisions'),
// важна поддержка 'revisions' для автосохранения
));Без 'revisions' и 'editor' автосохранение не будет работать.
2. Убедитесь, что CPT поддерживает функцию автосохранения
По умолчанию WordPress не всегда включает автосохранение для CPT. Чтобы принудительно включить, добавьте фильтр:
add_filter('wp_autosave_enabled', function($enabled, $post) {
if ($post->post_type === 'my_cpt') {
return true;
}
return $enabled;
}, 10, 2);3. Проверка nonce и прав пользователя
Если вы используете кастомные редакторы или метабоксы, убедитесь, что nonce и права пользователя проверяются корректно, иначе AJAX-запросы автосохранения будут отклоняться.
function my_cpt_save_post($post_id) {
if (!isset($_POST['my_cpt_nonce']) || !wp_verify_nonce($_POST['my_cpt_nonce'], 'save_my_cpt')) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
// сохраняем данные
}
add_action('save_post_my_cpt', 'my_cpt_save_post');Проверка результата после внедрения
- Откройте редактор записи CPT.
- Внесите изменения, не нажимая «Обновить».
- Подождите 1-2 минуты.
- Обновите страницу — изменения должны сохраниться автоматически.
- В консоли браузера должны появляться AJAX-запросы автосохранения.
Частые ошибки и их исправление
- Отсутствие поддержки 'revisions' в регистрационных параметрах CPT. Без этого автосохранение не сработает. Проверьте, что 'supports' включает 'revisions'.
- Неправильная проверка nonce или прав пользователя в обработчиках сохранения данных. Это блокирует сохранение автосохранением. Проверьте логику проверки.
- Кастомные редакторы без вызова
wp_editor(). Если вы внедряете редактор вручную, используйтеwp_editor()с правильными параметрами для поддержки автосохранения. - JavaScript ошибки на странице редактора. Они могут нарушать работу ajax-запросов. Проверяйте консоль браузера.
Практические советы по безопасности и производительности
- Используйте встроенную в WordPress систему nonce для защиты AJAX-запросов автосохранения.
- Ограничьте автосохранение по времени — стандартные 60 секунд оптимальны для баланса производительности и безопасности.
- Если CPT содержит большие данные (например, JSON или сериализованные поля), оптимизируйте сохранение, чтобы не перегружать сервер при автосохранении.
- Регулярно проверяйте конфликты плагинов, которые могут отключать автосохранение (например, плагины безопасности или оптимизации). Для теста отключайте плагины поочерёдно.
Сравнение способов реализации автосохранения для CPT
| Способ | Преимущества | Недостатки |
|---|---|---|
| Поддержка 'revisions' и 'editor' в CPT | Простая реализация, стандартные возможности WordPress | Не работает для кастомных редакторов без wp_editor() |
Фильтр wp_autosave_enabled | Принудительное включение автосохранения для CPT | Может потребоваться дополнительная обработка nonce и прав |
| Кастомные AJAX-обработчики автосохранения | Максимальный контроль над процессом | Сложность реализации и поддержания; риск ошибок |