Advanced Custom Fields (ACF) — один из самых популярных плагинов для работы с пользовательскими полями в WordPress. Однако по умолчанию поля ACF не отображаются в стандартном REST API WordPress. В этой статье разберём, как вывести данные ACF в REST API, чтобы использовать их в headless-приложениях, мобильных приложениях или для интеграций с внешними сервисами.
Почему важно выводить поля ACF в REST API WordPress
REST API WordPress предоставляет базовый набор данных постов, страниц и пользователей. Но часто для сложных проектов нужны дополнительные данные, которые хранятся именно в пользовательских полях ACF — например, галереи, адреса, дополнительные тексты или настройки.
Без вывода этих данных в API придётся делать обходные пути через дополнительные запросы или отдельные эндпоинты, что усложняет архитектуру и снижает производительность.
Включение полей ACF в REST API позволяет сразу получать все необходимые данные в одном запросе, упрощая работу фронтенд-разработчиков и ускоряя разработку.
Проблемы с выводом ACF по умолчанию в REST API
По умолчанию WordPress REST API не учитывает пользовательские поля, созданные через ACF. Это происходит потому, что ACF хранит данные в метаполях, а стандартный REST API не выводит все метаданные без регистрации дополнительных полей.
Чтобы исправить ситуацию, нужно явно регистрировать поля ACF для REST API или использовать специальные плагины и методы.
Методы вывода полей ACF в REST API
1. Использование плагина ACF to REST API
Самый простой способ — установить плагин ACF to REST API. Он автоматически добавляет все поля ACF к стандартным REST API ответам для постов, страниц и других типов записей.
Преимущества:
- Минимум настроек — плагин работает сразу после активации.
- Поддержка всех типов полей ACF.
- Совместимость с кастомными типами записей.
Недостатки:
- Может выводить слишком много данных, если много полей.
- Меньше контроля над форматированием вывода.
2. Ручная регистрация полей ACF в REST API через код
Если нужен больший контроль, можно самостоятельно зарегистрировать нужные поля ACF в REST API с помощью хуков. Вот пример, как вывести поле ACF с ключом wpquery_custom_field для типа записи post:
add_action('rest_api_init', function () {
register_rest_field('post', 'wpquery_custom_field', [
'get_callback' => 'wpquery_get_custom_field',
'schema' => null,
]);
});
function wpquery_get_custom_field($object, $field_name, $request) {
return get_field('wpquery_custom_field', $object['id']);
}
В этом примере мы добавляем новое поле wpquery_custom_field к ответу REST API для постов. Функция get_field — это функция ACF, которая возвращает значение поля.
Так можно регистрировать сколько угодно полей и даже создавать сложные структуры.
3. Использование фильтров для вывода всех ACF полей
Если хотите вывести все поля ACF сразу без регистрации каждого вручную, можно использовать фильтр rest_prepare_post для добавления всех полей к ответу:
add_filter('rest_prepare_post', function ($response, $post, $request) {
if (function_exists('get_fields')) {
$fields = get_fields($post->ID);
if ($fields) {
$response->data['acf'] = $fields;
}
}
return $response;
}, 10, 3);
Этот код добавит подмассив acf с полями ACF к любому ответу REST API для поста.
Практические советы и рекомендации
Оптимизация и безопасность
Вывод всех полей ACF может увеличить размер ответа и нагрузку на сервер. Рекомендуется:
- Выводить только необходимые поля, избегая избыточных данных.
- Ограничивать доступ к REST API через аутентификацию, если данные чувствительные.
- Кэшировать ответы API для ускорения работы.
Тестирование вывода полей ACF в REST API
Для проверки результата удобно использовать инструменты типа Postman или встроенный браузер по адресу:
https://ваш-сайт.ru/wp-json/wp/v2/posts
Там в ответе вы должны увидеть добавленные поля ACF — либо как отдельные ключи, либо в подмассиве acf, в зависимости от способа реализации.
Пример интеграции с фронтендом на React
Получив данные ACF через REST API, можно использовать их в React-приложении. Пример запроса с помощью fetch:
fetch('https://ваш-сайт.ru/wp-json/wp/v2/posts')
.then(response => response.json())
.then(data => {
data.forEach(post => {
console.log(post.acf);
});
});
Дальше данные можно отобразить в компонентах, например, вывести кастомное поле в карточке поста.
Заключение
Вывод полей ACF в REST API — важная задача для современных проектов на WordPress, использующих headless-архитектуру или внешние приложения. Выбор метода зависит от ваших потребностей и навыков: от простого плагина ACF to REST API до тонкой настройки через код.
Используйте примеры из статьи для быстрого старта и адаптируйте под свои задачи. Это позволит существенно расширить возможности вашего WordPress-сайта и интегрировать его с любыми внешними системами.