Использование ACF Datastore

Обзор

ACF Datastore — это опциональная функция, которая интегрирует поля ACF с нативным хранилищем Gutenberg wp.data. Когда она включена, значения полей ACF сохраняются через REST API WordPress вместо устаревшего AJAX-запроса метабокса, что обеспечивает полную поддержку ревизий и автосохранения.

Примечание: Datastore сейчас доступен в ACF PRO, пока мы собираем отзывы от первых пользователей.

Требования

  • ACF PRO 6.8.1 или новее
  • WordPress 6.7 или новее

Включение Datastore

Datastore по умолчанию отключен. Чтобы включить его, добавьте этот фильтр в вашу тему или плагин:

add_filter( 'acf/settings/enable_datastore', '__return_true' );

Вы также можете включить его условно:

add_filter( 'acf/settings/enable_datastore', function( $enabled ) {
    // Включать только для определённых типов записей
    if ( get_post_type() === 'product' ) {
        return true;
    }
    return $enabled;
});

Возможности

Поддержка ревизий

Когда Datastore включен, значения полей ACF включаются в ревизии записей. Это означает, что вы можете:

  • Просматривать изменения полей ACF на экране сравнения ревизий
  • Восстанавливать значения полей ACF при возврате к предыдущей ревизии
  • Точно видеть, что изменилось между версиями

Поддержка автосохранения

Значения полей ACF автоматически попадают в автосохранения WordPress. Если браузер зависнет или пользователь уйдёт со страницы, данные полей ACF сохранятся вместе с содержимым записи.

Поддержка привязок блоков

Когда Datastore включен, поля ACF становятся доступны в интерфейсе Block Bindings WordPress 6.7. Вы можете напрямую привязывать блоки Heading, Paragraph, Image и Button к полям ACF из панели Attributes в редакторе, с живым предпросмотром и редактированием на месте.

Чтобы использовать привязки блоков, для каждого поля также нужно включить параметр «Разрешить доступ к значению в интерфейсе редактора» на вкладке Presentation в настройках поля.

См. Привязки блоков для полной документации.

JavaScript API

Datastore предоставляет хранилище wp.data под названием acf/fields для программного чтения и записи значений полей.

Чтение значений полей

// Получить значение одного поля
const value = wp.data.select( 'acf/fields' ).getFieldValue( 'field_name' );

// Получить все значения полей
const allValues = wp.data.select( 'acf/fields' ).getFieldValues();

Запись значений полей

// Установить значение одного поля
wp.data.dispatch( 'acf/fields' ).setFieldValue( 'field_name', 'new value' );

// Установить несколько значений полей
wp.data.dispatch( 'acf/fields' ).setFieldValues({
    field_name: 'value',
    another_field: 'another value'
});

Подписка на изменения

wp.data.subscribe( () => {
    const value = wp.data.select( 'acf/fields' ).getFieldValue( 'my_field' );
    console.log( 'Значение поля изменилось:', value );
});

Совместимость с устаревшим API

Datastore поддерживает двустороннюю синхронизацию с существующим jQuery-ориентированным DOM полей ACF. Это означает:

  • Изменения, внесённые через JavaScript API, обновляют поля ввода в метабоксе
  • Изменения, сделанные при редактировании полей в метабоксе, обновляют Datastore
  • Существующий код, использующий acf.getField(), продолжает работать

Вы также можете использовать acf.store.set() для записи значений — это синхронизирует их и с DOM, и с хранилищем wp.data.

Особенности миграции

Изменения в потоке сохранения

Когда Datastore включен, поля ACF сохраняются через REST API Gutenberg, а не через устаревший AJAX-запрос метабокса. Если у вас есть собственный JavaScript, привязанный к событиям сохранения ACF через путь метабокса, его нужно обновить, чтобы он использовал сохранение REST в Gutenberg.

До этого (устаревшее сохранение):

acf.addAction( 'submit', function( $form ) {
    // Это не сработает при включенном Datastore
});

После этого (сохранение REST):

wp.data.subscribe( () => {
    const isSaving = wp.data.select( 'core/editor' ).isSavingPost();
    // Обработка состояния сохранения
});

Обработка существующих ревизий

Если вы создали собственную обработку ревизий для полей ACF (используя wp_save_post_revision или аналогичный код), при включенном Datastore может возникнуть двойная обработка, поскольку значения ACF теперь нативно включаются в ревизии.

Проверьте весь собственный код, связанный с ревизиями, и удалите его, если он больше не нужен.

Известные ограничения

Вложенные реляционные поля

Реляционные под-поля внутри повторителей или групп в этой версии не покрываются AJAX-подгрузкой меток. Корректно подгружаются только поля верхнего уровня, когда значение отсутствует в заранее отрендеренных вариантах.

Обходные пути:
– По возможности оставляйте реляционные поля на верхнем уровне
– Предзаполняйте варианты поля на сервере с помощью фильтра acf/fields/{field_type}/query
– После программной установки значения перезагрузите страницу, чтобы путь рендеринга поля получил метку

Требование к версии WordPress

Фильтр acf/settings/enable_datastore не работает в версиях WordPress ниже 6.7. Datastore требует API, которые были стабилизированы в этом релизе.

Отключение Datastore

Если после включения Datastore вы столкнулись с проблемами, его можно отключить, чтобы немедленно вернуться к устаревшему пути сохранения:

add_filter( 'acf/settings/enable_datastore', '__return_false', 100 );

Это возвращает ACF к точно такому же поведению, как в версии 6.8.0, без каких-либо других изменений кода.

Устранение неполадок

Поля не сохраняются

  1. Проверьте, что установлен WordPress 6.7 или новее
  2. Убедитесь, что фильтр применяется (для проверки используйте acf_is_using_datastore())
  3. Проверьте наличие JavaScript-ошибок в консоли браузера
  4. Убедитесь, что другие плагины не мешают сохранению через REST API

Собственные хукeи сохранения не срабатывают

Если ваши собственные JavaScript-хуки сохранения перестали работать, скорее всего, они были привязаны к устаревшему AJAX-пути метабокса. Обновите их, чтобы они использовали подписки wp.data в Gutenberg.

В сравнении ревизий отображаются сырые данные

Значения полей ACF для Datastore хранятся в meta._acf. В сравнении ревизий будут показаны сериализованные значения. Это ожидаемое поведение.

Обновлено: 01.06.2026