Обзор
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, без каких-либо других изменений кода.
Устранение неполадок
Поля не сохраняются
- Проверьте, что установлен WordPress 6.7 или новее
- Убедитесь, что фильтр применяется (для проверки используйте
acf_is_using_datastore()) - Проверьте наличие JavaScript-ошибок в консоли браузера
- Убедитесь, что другие плагины не мешают сохранению через REST API
Собственные хукeи сохранения не срабатывают
Если ваши собственные JavaScript-хуки сохранения перестали работать, скорее всего, они были привязаны к устаревшему AJAX-пути метабокса. Обновите их, чтобы они использовали подписки wp.data в Gutenberg.
В сравнении ревизий отображаются сырые данные
Значения полей ACF для Datastore хранятся в meta._acf. В сравнении ревизий будут показаны сериализованные значения. Это ожидаемое поведение.
Обновлено: 01.06.2026