Wordpress Rest API - настраиваемые поля

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

В моих темах function.php я зарегистрировал эти поля в ответе и вижу их, когда делаю запрос на получение.

register_rest_field('auto', 'specs', array('get_callback' => 'get_autos_specs_for_api'));

Проблема в том, что когда я отправляю почтовый запрос, wordpress не распознает эти поля. Он создает новый пост с заголовком, а все дополнительные поля пусты.


person Yasin Yaqoobi    schedule 29.05.2017    source источник


Ответы (3)


Попробуйте это решение:

function wp_api_encode_acf($data,$post,$context){
    $data['meta'] = array_merge($data['meta'],get_fields($post['ID']));
    return $data;
}

if( function_exists('get_fields') ){
    add_filter('json_prepare_post', 'wp_api_encode_acf', 10, 3);
}

См .: https://gist.github.com/rileypaulsen/9b4505cdd0ac88d5ef51

person htmlbrewery    schedule 29.05.2017
comment
Да, это первое, что я увидел. Думаю, это для плагина. Он не работает со встроенным API Wordpress. - person Yasin Yaqoobi; 30.05.2017
comment
Я понимаю, почему бы вам не попробовать использовать функцию WP по умолчанию, чтобы получить мета get_post_meta? - person htmlbrewery; 30.05.2017

Вместо использования настраиваемого кода используйте готовое решение для доступа к полям ACF в Rest API.
URL-адрес подключаемого модуля: https://github.com/airesvsg/acf-to-rest-api

Добавьте фильтр, как показано ниже:

//Filter to to get acf field within acf field for relational field set
add_filter( 'acf/rest_api/<custom_posttype>/get_fields', function( $data ) {
    if ( ! empty( $data ) ) {
        array_walk_recursive( $data, 'get_fields_recursive' );
    }

    return $data;
} );

Вы получите объект полей ACF внутри ответа WordPress Rest API по умолчанию, если все настройки верны.

Сообщите мне, если понадобится помощь!

person Jenil Kanani    schedule 13.09.2019

Для меня уловка заключалась в том, чтобы зацепить себя за остальную подготовительную публикацию, а затем добавить свои поля в массив, а затем вернуть объект ответа.

function slug_add_data($response, $post) {

    $response->data['latitud'] = get_field('latitud', $response->data['id']);
    $response->data['longitud'] = get_field('longitud', $response->data['id']);

    return $response;
}

add_filter('rest_prepare_post', 'slug_add_data', 10, 3);
person Simon Berton    schedule 11.08.2017