Интеграция с WP REST API

Обзор

Начиная с версии 5.11, ACF включает поддержку просмотра и управления произвольными полями через WordPress REST API. Это позволяет разработчикам получать доступ и редактировать данные своих произвольных полей, используя стандартные конечные точки WP REST API, или создавать пользовательские темы с помощью React, Vue или любой другой JavaScript-библиотеки.

Эндпоинты

Любые группы произвольных полей, добавленные к данным WordPress, таким как записи (включая пользовательские типы записей), пользователи и категории (включая пользовательские таксономии), будут доступны в соответствующих конечных точках WP REST API, а именно:

  • /{post-type}
    • записи, страницы, пользовательские типы записей и т.д.
  • /{post-type}/{post_id}
  • /{post-type}/{post_id}/revisions
  • /{post-type}/{post_id}/revisions/{revision_id}
  • /{post-type}/{post_id}/autosaves
  • /{post-type}/{post_id}/autosaves/{autosave_id}
  • /users
  • /users/{user_id}
  • /users/me
  • /categories
  • /categories/{category_id}
  • /{custom-taxonomy}/{term_id}

 

Включение REST API для ваших ACF полей

По умолчанию группы полей не видны в WP REST API. Вы должны явно включить эту опцию, если хотите, чтобы они отображались в WP REST API.

Вы можете включить видимость в REST API для конкретной группы полей в ее области Настроек. Нажмите на вкладку Настройки группы, а затем переключите опцию Показывать в REST API.

 

Использование REST API с пользовательскими типами записей и таксономиями

По умолчанию пользовательские типы записей и таксономии, созданные в ACF, видны в WP REST API, с пространством имен по умолчанию wp/v2 и классом контроллера по умолчанию WP_REST_Posts_Controller для типов записей и WP_REST_Terms_Controller для таксономий.

Чтобы изменить настройки видимости или другие настройки REST API по умолчанию для пользовательских типов записей, перейдите в ACF → Типы записей и выберите или зарегистрируйте пользовательский тип записи. Включите Расширенная конфигурация, чтобы открыть «Расширенные настройки». Нажмите на вкладку REST API для доступа к настройкам, включая видимость, пространство имен и класс контроллера. Эта вкладка также позволяет вам создать базовый URL для REST API URL данного типа записи.

Аналогичный процесс можно выполнить для пользовательских таксономий.

 

Методы запросов

Следующие три метода запросов могут использоваться вместе с данными ACF:

  1. GET запросы позволяют просматривать данные ACF.
  2. OPTIONS запросы позволяют просматривать схему для данных ACF.
  3. POST запросы позволяют обновлять любые поля ACF и требуют аутентификации для выполнения запроса.

GET запрос

GET запрос покажет данные ACF в REST ответе.

В следующем примере мы настроили пользовательский тип записи book и группу полей ACF для всех книг с полями Автор (Текст), Биография автора (WYSIWYG) и Изображение автора (Изображение). Мы добавим данные для каждого из этих произвольных полей в каждую книгу.

Выполнение GET запроса к https://hellfish.media/wp-json/wp/v2/book/{ID}, где {ID} — это ID данной книги, показывает данные произвольных полей в JSON объекте acf, сразу после данных template.

{
  "id": 3944,
  "date": "2021-11-15T10:11:38",
  "date_gmt": "2021-11-15T10:11:38",
  "guid": {
    "rendered": "https://hellfish.media/?post_type=book&p=3944"
  },
  "modified": "2021-11-15T10:11:52",
  "modified_gmt": "2021-11-15T10:11:52",
  "slug": "tales-of-the-flying-hellfish",
  "status": "publish",
  "type": "book",
  "link": "https://hellfish.media/book/tales-of-the-flying-hellfish/",
  "title": {
    "rendered": "Tales of the Flying Hellfish"
  },
  "content": {
    "rendered": "<p>The <b>Flying Hellfish</b> (also referred to as just &#8220;<b>the Hellfish</b>&#8220;) was the military unit <a class=\"mw-redirect\" title=\"Abraham Simpson\" href=\"https://simpsons.fandom.com/wiki/Abraham_Simpson\">Abraham Simpson</a>, <a title=\"Charles Montgomery Burns\" href=\"https://simpsons.fandom.com/wiki/Charles_Montgomery_Burns\">Charles Montgomery Burns</a>, and several other <a title=\"Springfield\" href=\"https://simpsons.fandom.com/wiki/Springfield\">Springfieldians</a> served in during <a title=\"World War II\" href=\"https://simpsons.fandom.com/wiki/World_War_II\">World War II</a>.</p>\n<p>Presumably, the Flying Hellfish was first dispatched to Normandy for the <a class=\"extiw\" title=\"wikipedia:Invasion of Normandy\" href=\"http://en.wikipedia.org/wiki/Invasion_of_Normandy\">Invasion of Normandy</a>.</p>\n<p>Burns was always the unit&#8217;s troublemaker. The Hellfish got stuck with Burns because he obstructed a probe from J. Edgar Hoover, thus resulting in his demotion. He faked his own death several times and even ruined Simpson&#8217;s chance to assassinate <a title=\"Adolf Hitler\" href=\"https://simpsons.fandom.com/wiki/Adolf_Hitler\">Adolf Hitler</a>.</p>\n<p>At one point, near the end of the war, the unit stormed a German castle. While searching through it, Private Burns found a collection of stolen paintings. While discussing what they should do with them, Burns mentions the idea of <a class=\"extiw\" title=\"wikipedia:Tontine\" href=\"http://en.wikipedia.org/wiki/Tontine\">tontine</a>, where the members must enter into a contract of when the last surviving member inherits the paintings if the others pass away. The unit agrees for their own personal reasons (Gumble wanting to buy his way into high society, Abe not wanting to end up &#8220;in one of them old folk&#8217;s homes&#8221;). Everyone signs and shakes on this prospect.</p>\n<p>Ox was the first member to die because of a <a class=\"extiw\" title=\"wikipedia:hernia\" href=\"http://en.wikipedia.org/wiki/hernia\">hernia</a> he got while taking the crate out of the castle. Five more were killed in a parade float accident in 1979. After Asa Phelps died, only Burns and Abe remained. Later, Simpson gave Burns a dishonorable discharge from the Hellfish for trying to kill him and his grandson <a title=\"Bart Simpson\" href=\"https://simpsons.fandom.com/wiki/Bart_Simpson\">Bart</a>, expelling him from the tontine and declaring himself the sole possessor of the paintings in default, much to Burns&#8217; dismay. Unfortunately for Grampa and Bart, their victory was cut short when the U.S. State Department arrive and took the paintings, as they have been searching for them for 50 years to avoid any international incidents with the German government. The State Department then returns the paintings to their rightful owner&#8217;s descendant, <a title=\"Baron von Herzenberger\" href=\"https://simpsons.fandom.com/wiki/Baron_von_Herzenberger\">Baron von Herzenberger</a>.</p>\n<p>&nbsp;</p>\n",
    "protected": false
  },
  "template": "",
  "acf": {
    "author": "Abraham Simpson",
    "author_bio": "<b>Abraham Jebediah \"Abe\" Simpson II</b>, commonly known as <b>Grampa Simpson</b> or simply <b>Grampa</b>, (born August 26, 1920) is a major character in <i><a title=\"The Simpsons\" href=\"https://simpsons.fandom.com/wiki/The_Simpsons\">The Simpsons</a></i>. He is the oldest patriarch of the <a title=\"Simpson family\" href=\"https://simpsons.fandom.com/wiki/Simpson_family\">Simpson family</a>, father of <a title=\"Homer Simpson\" href=\"https://simpsons.fandom.com/wiki/Homer_Simpson\">Homer Simpson</a>, and paternal grandfather of <a title=\"Bart Simpson\" href=\"https://simpsons.fandom.com/wiki/Bart_Simpson\">Bart</a>, <a title=\"Lisa Simpson\" href=\"https://simpsons.fandom.com/wiki/Lisa_Simpson\">Lisa</a> and <a title=\"Maggie Simpson\" href=\"https://simpsons.fandom.com/wiki/Maggie_Simpson\">Maggie Simpson</a>.",
    "author_image": 3949
  },
  "_links": {
    "self": [
      {
        "href": "https://hellfish.media/wp-json/wp/v2/book/3944"
      }
    ],
    "collection": [
      {
        "href": "https://hellfish.media/wp-json/wp/v2/book"
      }
    ],
    "about": [
      {
        "href": "https://hellfish.media/wp-json/wp/v2/types/book"
      }
    ],
    "wp:attachment": [
      {
        "href": "https://hellfish.media/wp-json/wp/v2/media?parent=3944"
      }
    ],
    "curies": [
      {
        "name": "wp",
        "href": "https://api.w.org/{rel}",
        "templated": true
      }
    ]
  }
}

OPTIONS запрос

Выполнение OPTIONS запроса к конечной точке WordPress REST API позволяет увидеть схему для этого объекта данных, т.е. доступные поля и их свойства. Для полей ACF это позволяет увидеть детали для поля. Например, базовое текстовое поле может иметь ограничение «Максимальная длина» по количеству символов, которое будет отображено в схеме для этого поля. Пожалуйста, смотрите Типы полей REST API для более подробной информации.

В нашем примере записи выше, выполнение OPTIONS запроса вернет схему для книги, включая данные о полях ACF, которые мы настроили.

{
  "acf": {
    "description": "ACF field data",
    "type": "object",
    "properties": {
      "author": {
        "type": [
          "string",
          "null"
        ],
        "required": false
      },
      "author_bio": {
        "type": [
          "string",
          "null"
        ],
        "required": false
      },
      "author_image": {
        "type": [
          "integer",
          "null"
        ],
        "required": false
      }
    },
    "required": false
  }
}

POST запрос

Выполнение POST запроса позволит вам изменить данные о книге. В нашем случае мы можем обновить поля ACF author, author_bio и author_image. Поскольку POST запросы позволяют изменять данные, вам потребуется аутентифицировать ваш запрос, используя один из доступных методов аутентификации. Чтобы обновить ваши группы полей ACF, вам нужно передать данные в виде закодированного JSON объекта acf, используя ту же структуру, что и в GET запросе. В нашем примере выше, чтобы обновить данные author, мы бы передали следующие данные:

{
  "acf": {
    "author": "Abraham (Abe) Simpson"
  }
}

Ниже приведен пример выполнения POST запроса через JavaScript, используя утилиту WordPress apiFetch:

import apiFetch from '@wordpress/api-fetch';

// POST
apiFetch( {
  path: '/wp/v2/book/{ID}',
  method: 'POST',
  data: {
    "acf": {
      "author": "Abraham (Abe) Simpson",
    }
  },
} ).then( ( res ) => {
  console.log( res );
} );

Это приведет к обновлению объекта acf книги.

Передача null в ваши поля ACF удаляет содержимое поля:

import apiFetch from '@wordpress/api-fetch';

// POST
apiFetch( {
  path: '/wp/v2/book/{ID}',
  method: 'POST',
  data: {
    "acf": {
      "author_bio": null
    }
  },
} ).then( ( res ) => {
  console.log( res );
} );

Это приведет к следующему объекту acf книги:

{
  "acf": {
    "author": "Abraham (Abe) Simpson",
    "author_bio": "",
    "author_image": 3949
  }
}

 

Аутентификация

Поскольку ACF использует основные конечные точки WP REST API, по умолчанию он использует основные методы аутентификации (куки и одноразовые числа). Это означает, что если вы создаете что-то в консоли WordPress, код будет выполняться в уже аутентифицированной сессии, и никакая специальная аутентификация не требуется.

Если вы хотите создать что-то, использующее конечные точки REST API вне аутентифицированной сессии (например, JavaScript приложение, работающее на REST API), вам потребуется аутентифицировать любые POST запросы. Существует несколько способов обработки этой аутентификации, включая Пароли приложений (доступные в ядре WordPress) и плагин JSON Web Tokens.

Типы полей REST API

В этой таблице перечислены все типы полей ACF, поддерживаемые в WP REST API.

Тип поляТипыПримечания
Текстstring, null 
Текстовая областьstring, null 
Числоnumber, nullСтроковое представление числа допустимо. Например: ‘123’.
Диапазонnumber, nullСтроковое представление числа допустимо. Например: ‘123’.
Emailstring (email), nullЕсли значение не в правильном формате email, запрос завершится ошибкой 400 bad request.
URLstring (uri), nullЕсли строка не имеет протокола, API добавит префикс http://.
Парольstring, null 
Изображениеinteger, nullОжидает ID вложения.
Файлinteger, nullОжидает ID вложения.
Визуальный редакторstring, null 
oEmbedstring (uri), nullЕсли строка не имеет протокола, API добавит префикс http://.
Галереяnumber[], nullМассив ID вложений.
Выборstring, array, nullПоддерживает как массив, так и одиночную строку. Массив для выбора нескольких значений.
Флажкиstring, array, nullПоддерживает как массив, так и одиночную строку.
Переключательstring, null 
Группа кнопокstring, null 
Истина/Ложьboolean, null0 и 1 также могут быть отправлены как строка.
Ссылкаobject, nullОбъект принимает свойства title, url и target.
Объект записиint, array, nullПоддерживает как массив, так и одиночную строку. Массив для выбора нескольких значений.
Ссылка на страницуstring, int, array, nullПоддерживает как массив, так и одиночную строку. Массив для выбора нескольких значений.
Связьint, array, nullПоддерживает как массив, так и одиночную строку. Массив или CSV для выбора нескольких значений.
Таксономияstring, array, nullПоддерживает как массив, так и одиночную строку. Массив для выбора нескольких значений.
Пользовательstring, array, nullПоддерживает как массив, так и одиночную строку. Массив или CSV для выбора нескольких значений.
Google Картаobject, nullМожет быть простым объектом со свойствами lat, lng. Поддерживает: address, lat, lng, zoom, place_id, name, street_number, street_name, street_name_short, city, state, state_short, post_code, country, country_short.
Выбор датыstring, nullСтрока даты в формате Ymd.
Выбор даты и времениstring, nullСтрока даты и времени в формате Y-m-d H:i:s.
Выбор времениstring, nullСтрока времени в формате H:i:s.
Выбор цветаstring, nullЛибо 6-символьный hex-код, либо строка RGB или RGBA.
Сообщение В настоящее время не поддерживается в REST API.
Аккордеон В настоящее время не поддерживается в REST API.
Вкладка В настоящее время не поддерживается в REST API.
Группаobject,nullОбъект, содержащий имена и значения подполей.
Повторительarray, nullМассив объектов, каждый из которых представляет строку значений, сопоставленных с именами подполей.
Гибкий контентarray, nullМассив объектов, каждый из которых представляет макет значений, сопоставленных с именами подполей. acf_fc_layout является обязательным свойством для каждого объекта и должно соответствовать имени макета, настроенного на обновляемом поле гибкого контента.
Клонobject, nullБудет появляться в REST запросах только если поле Клон установлено в режим Группа. В режиме Группа это свойство будет принимать объект, содержащий имена и значения подполей. Если вместо этого установлен режим Бесшовный, клонированные поля появятся на его месте. Если поле Клон помечено как обязательное, все подполя также будут обязательными.

 

Примечания для разработчиков

Отключение системы ACF REST API

Возможно полностью отключить поддержку WP REST API, вернув false для фильтра acf/settings/rest_api_enabled. Это переопределяет любые настройки «Показывать в REST API» для ваших групп полей и полностью отключает поддержку WP REST API для ACF:

add_filter( 'acf/settings/rest_api_enabled', '__return_false' );

 

Расширение системы REST API

Ограничение видимых полей с помощью параметра запроса _fields

Параметр запроса WP REST API ?_fields может использоваться для запроса только объекта acf или определенных полей внутри него.

// Вернуть объект acf и все доступные поля:

/wp-json/wp/v2/book/{ID}?_fields=acf

// Вернуть только определенное поле из объекта acf:

/wp-json/wp/v2/book/{ID}?_fields=acf.author,acf.author_bio

// Вернуть определенное подполе из определенного группового поля из объекта acf:

/wp-json/wp/v2/book/{ID}?_fields=acf.author_meta.profile_url

Управление форматом вывода

Использование параметра acf_format в вашем запросе WP REST API может быть использовано для изменения вывода запроса.

Значение по умолчанию для этого параметра — light, и оно передает значения полей в метод format_value_for_rest() для конкретного объекта типа поля перед отображением данных в ответе. Это применяет очень легкое форматирование и сохраняет вывод поля сырым и соответствующим схеме. Примеры ответов ранее в этом документе показывают вывод формата light.

Передача standard параметру обеспечит форматирование всех полей с использованием глобальной функции ACF acf_format_value(). Ниже приведен пример передачи standard параметру для нашего предыдущего примера. Как вы можете видеть, поле author_image теперь включает больше информации об изображении:

/wp-json/wp/v2/book/{ID}?_fields=acf&acf_format=standard
{
  "acf": {
    "author": "Abraham Simpson",
    "author_bio": "<p><b>Abraham Jebediah &#8220;Abe&#8221; Simpson II</b>, commonly known as <b>Grampa Simpson</b> or simply <b>Grampa</b>, (born August 26, 1920) is a major character in <i><a title=\"The Simpsons\" href=\"https://simpsons.fandom.com/wiki/The_Simpsons\">The Simpsons</a></i>. He is the oldest patriarch of the <a title=\"Simpson family\" href=\"https://simpsons.fandom.com/wiki/Simpson_family\">Simpson family</a>, father of <a title=\"Homer Simpson\" href=\"https://simpsons.fandom.com/wiki/Homer_Simpson\">Homer Simpson</a>, and paternal grandfather of <a title=\"Bart Simpson\" href=\"https://simpsons.fandom.com/wiki/Bart_Simpson\">Bart</a>, <a title=\"Lisa Simpson\" href=\"https://simpsons.fandom.com/wiki/Lisa_Simpson\">Lisa</a> and <a title=\"Maggie Simpson\" href=\"https://simpsons.fandom.com/wiki/Maggie_Simpson\">Maggie Simpson</a>.</p>\n",
    "author_image": {
      "ID": 3949,
      "id": 3949,
      "title": "Abraham_Simpson",
      "filename": "Abraham_Simpson.webp",
      "filesize": 28342,
      "url": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson.webp",
      "link": "https://hellfish.media/book/tales-of-the-flying-hellfish/abraham_simpson/",
      "alt": "",
      "author": "1",
      "description": "",
      "caption": "",
      "name": "abraham_simpson",
      "status": "inherit",
      "uploaded_to": 3944,
      "date": "2021-11-15 10:11:31",
      "modified": "2021-11-15 10:11:31",
      "menu_order": 0,
      "mime_type": "image/webp",
      "type": "image",
      "subtype": "webp",
      "icon": "https://hellfish.media/wp-includes/images/media/default.png",
      "width": 302,
      "height": 482,
      "sizes": {
        "thumbnail": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson-150x150.webp",
        "thumbnail-width": 150,
        "thumbnail-height": 150,
        "medium": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson-188x300.webp",
        "medium-width": 188,
        "medium-height": 300,
        "medium_large": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson.webp",
        "medium_large-width": 302,
        "medium_large-height": 482,
        "large": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson.webp",
        "large-width": 302,
        "large-height": 482,
        "1536x1536": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson.webp",
        "1536x1536-width": 302,
        "1536x1536-height": 482,
        "2048x2048": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson.webp",
        "2048x2048-width": 302,
        "2048x2048-height": 482,
        "avatar": "https://hellfish.media/wp-content/uploads/2021/11/Abraham_Simpson.webp",
        "avatar-width": 302,
        "avatar-height": 482
      }
    }
  }
}

Кроме того, если вы хотите установить формат standard по умолчанию для всех данных ответа, вы можете принудительно установить это с помощью фильтра acf/settings/rest_api_format:

add_filter( 'acf/settings/rest_api_format', function () {
    return 'standard';
} );

Если вы хотите применить специфическое дополнительное форматирование к значению поля ACF в WP REST API, фильтр acf/rest/format_value_for_rest применяется ко всем значениям полей ACF, отформатированных для WP REST API:

/**
     * Фильтрует отформатированное значение для данного поля.
     *
     * @param mixed      $value_formatted Отформатированное значение.
     * @param string|int $post_id ID текущего объекта.
     * @param array      $field Массив поля.
     * @param mixed      $value Сырое/неотформатированное значение.
     * @param string     $format Формат, примененный к значению поля.
     */
    return apply_filters( 'acf/rest/format_value_for_rest', $value_formatted, $post_id, $field, $value, $format );

Вы можете использовать этот фильтр для применения собственного форматирования/вывода к отформатированному значению поля. Например, реализация этого сниппета заставит каждое значение поля acf в ответе включать метку поля как часть объекта поля:

add_filter('acf/rest/format_value_for_rest', function ($value_formatted, $post_id, $field, $value, $format){
    return array(
        $field['label'] => $value_formatted
    );
}, 10, 5);
{
  "acf": {
    "author": {
      "Author": "Abraham Simpson"
    },
    "author_bio": {
      "Author Bio": "<b>Abraham Jebediah \"Abe\" Simpson II</b>, commonly known as <b>Grampa Simpson</b> or simply <b>Grampa</b>, (born August 26, 1920) is a major character in <i><a title=\"The Simpsons\" href=\"https://simpsons.fandom.com/wiki/The_Simpsons\">The Simpsons</a></i>. He is the oldest patriarch of the <a title=\"Simpson family\" href=\"https://simpsons.fandom.com/wiki/Simpson_family\">Simpson family</a>, father of <a title=\"Homer Simpson\" href=\"https://simpsons.fandom.com/wiki/Homer_Simpson\">Homer Simpson</a>, and paternal grandfather of <a title=\"Bart Simpson\" href=\"https://simpsons.fandom.com/wiki/Bart_Simpson\">Bart</a>, <a title=\"Lisa Simpson\" href=\"https://simpsons.fandom.com/wiki/Lisa_Simpson\">Lisa</a> and <a title=\"Maggie Simpson\" href=\"https://simpsons.fandom.com/wiki/Maggie_Simpson\">Maggie Simpson</a>."
    },
    "author_image": {
      "Author Image": 3949
    }
  }
}

Также возможно использовать этот фильтр для определенных типов полей или для конкретных полей по имени или ключу.

Применить ко всем полям типа text:

add_filter('acf/rest/format_value_for_rest/type=text', function ($value_formatted, $post_id, $field, $value, $format){
    // вернуть переопределенное значение
}, 10, 5);

Применить к полю с именем author:

add_filter('acf/rest/format_value_for_rest/name=author', function ($value_formatted, $post_id, $field, $value, $format){
    // вернуть переопределенное значение
}, 10, 5);

Применить к полю с ключом field_123456789:

add_filter('acf/rest/format_value_for_rest/key=field_123456789', function ($value_formatted, $post_id, $field, $value, $format){
    // вернуть переопределенное значение
}, 10, 5);
);

Фильтрация полей, отображаемых на любой конечной точке

Фильтр acf/rest/get_fields может использоваться для управления тем, какие поля показываются или доступны для обновления. Параметр $http_method, передаваемый в фильтр, может использоваться для изменения полей, отображаемых для определенного метода запроса (т.е. GET, POST или OPTIONS):

add_filter( 'acf/rest/get_fields', function ( $fields, $resource, $http_method ) {
    // Измените и верните массив $fields здесь.

    // Пример 1: Отключить все поля для всех методов запроса на определенном пользовательском типе записи.
    if ( $resource['type'] == 'post' && $resource['sub_type'] == 'book' ) {
        return [];
    }

    // Пример 2: Показывать только определенное поле в GET запросах для терминов.
    if ( $http_method == 'GET' && $resource['type'] == 'term' ) {
        return wp_list_filter( $fields, [ 'name' => 'author' ] );
    }

    // Пример 3: Исключить определенные типы полей в POST запросах для пользователей.
    if ( $http_method == 'POST' &&  $resource['type'] == 'user' ) {
        return array_filter( $fields, function ( $field ) {
            return ! in_array( $field['type'], [
                'password',
                'file',
            ] );
        } );
    }

    return $fields;
}, 10, 3 );

Управление ссылками встраивания REST API

GET запросы к объектам с определенными типами полей также будут включать ссылку встраивания — URL, который указывает на другой ресурс. Примером этого может быть поле Пользователь, которое добавит ссылку на выбранного пользователя в раздел _links REST ответа:

"acf:user": [
  {
    "embeddable": true,
    "href": "https://hellfish.media/wp-json/wp/v2/users/1"
  }
],

Если вам нужно упростить REST ответ, возможно отключить обработчик ссылок встраивания с помощью глобального фильтра acf/settings/rest_api_embed_links:

add_filter( 'acf/settings/rest_api_embed_links', '__return_false' );

Если требуется более детальный контроль, фильтр acf/rest/get_field_links и его вариации type, name и key могут использоваться для изменения ссылок, возвращаемых на уровне поля. Например:

add_filter( 'acf/rest/get_field_links', function ( $links, $post_id, $field, $value ) {
    // Возврат пустого массива или любого значения, которое ложно, отключит ссылки для этого конкретного поля. Например:
    if ( $field['name'] === 'author' ) {
        return false;
    }

    // Определите любое количество встраиваемых ссылок и выберите, как их группировать, используя ключ rel. Обратите внимание, что если embeddable
    // установлено в FALSE, ресурс не будет расширяться, когда присутствует параметр запроса _embed.
    $links = [
        [
            'rel' => 'acf:post',
            'href' => rest_url( 'wp/v2/posts/123' ),
            'embeddable' => true,
        ],
        [
            'rel' => 'acf:post',
            'href' => rest_url( 'wp/v2/posts/456' ),
            'embeddable' => true,
        ],
        [
            'rel' => 'acf:user',
            'href' => rest_url( 'wp/v2/users/234' ),
            'embeddable' => true,
        ],
        [
            'rel' => 'author_meta_group',
            'href' => 'http://example.com', // Можно использовать внешние ссылки.
            'embeddable' => false, // FALSE отключает обработку встраивания WordPress.
        ],
    ];

    return $links;
}, 10, 4 );

Управление схемой поля

Схема используется WordPress для проверки и санитации данных при вводе. Она также позволяет внешним системам/сервисам понимать данные API. Схема генерируется для каждой конечной точки ресурса ACF. Возможно управлять схемой поля с помощью фильтра acf/rest/get_field_schema и его вариаций type, name и key. Например:

add_filter( 'acf/rest/get_field_schema', function ( $schema, $field ) {
    if($field['type'] === 'number'){
        $schema['minimum'] = 1;
        $schema['maximum'] = 100;
        $schema['multipleOf'] = 1;
    }

    return $schema;
}, 10, 2 );