Вывести выбор полей ACF в пользовательской конечной точке API REST - PullRequest
0 голосов
/ 03 февраля 2020

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

Это код, который я использую пытается в functions.php:

function test_get_acf() {
    $field = get_field_object('credits');
    $credits = array();
    if( $field['choices'] ) {
        foreach( $field['choices'] as $value => $label ) {
            array_push($credits, $value);
        }
    }
    $items = array(
        'credits' => $credits
    );
    return $items;
  }

И это функция, создающая конечную точку:

  function test_register_api_endpoints() {
    register_rest_route( 'test/v2', '/acf', array(
      'methods' => 'GET',
      'callback' => 'test_get_acf',
    ) );
  }

  add_action( 'rest_api_init', 'test_register_api_endpoints' );

Однако, делая это, я получаю следующий JSON вывод:

[
   "credits": [ ]
]

Так что это явно не работает. Что я делаю не так?

1 Ответ

0 голосов
/ 03 февраля 2020

Проблема в том, что ACF не может найти поле, которое вы запрашиваете. Согласно документации get_field_object () , он также принимает аргумент post_id, который по умолчанию равен текущему идентификатору записи, чтобы только получить объект поля (вне контекста записи), вы должны либо использовать ключ поля следующим образом:

$field = get_field_object('field_5e380cf7b4bf0');

, который в данном случае field_5e380cf7b4bf0 является ключом вашего поля. Если вам нужно использовать этот метод, и вам также нужно динамически получить ключ, есть инструкция здесь о том, как получить ключ поля по его имени.

Или передать ему образец идентификатора записи :

global $wp_query;
$field = get_field_object('credits', $wp_query->posts[0]->ID); // Or just pass a number like 1 if you are sure that a post with that id exists

Примечание: Если вы только что создали поле и еще нет сообщений, использующих его, оно также может привести к false при вызове get_field_object()

...