wphow.ru wordpress WPHow

Как добавить поддержку автосохранения для кастомных типов постов в WordPress

Почему автосохранение важно для кастомных типов постов

Автосохранение в WordPress помогает предотвратить потерю данных при редактировании записей. Для стандартных постов и страниц эта функция включена по умолчанию. Но если вы создаёте кастомный тип поста (Custom Post Type, CPT) с собственными параметрами, автосохранение может не работать из-за отсутствия поддержки или неправильных настроек. В результате пользователь рискует потерять изменения при сбоях или случайном закрытии вкладки.

Диагностика: как проверить, работает ли автосохранение для CPT

  1. Откройте редактор записи кастомного типа поста.
  2. Внесите изменения в содержимое и не нажимайте кнопку «Обновить».
  3. Подождите около 1-2 минут, чтобы сработал интервал автосохранения.
  4. Обновите страницу, не сохраняя изменения.
  5. Если изменения пропали, значит автосохранение не работает.

Также можно проверить сетевые запросы в консоли браузера (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-обработчики автосохраненияМаксимальный контроль над процессомСложность реализации и поддержания; риск ошибок
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙