Настраиваемое поле не отображается в ответе WordPress REST API

Я пытаюсь добавить настраиваемое поле в ответ REST API для моего настраиваемого типа сообщения в WordPress. Поле должно отображать значение my_custom_field. Однако настраиваемое поле не отображается в ответе.

Вот код, который я использую:

function add_custom_fields_to_rest_api() {
    register_rest_field(
        'my_custom_post_type',
        'my_custom_field',
        array(
            'get_callback' => 'get_custom_field_value',
            'update_callback' => null,
            'schema' => null,
        )
    );
}

function get_custom_field_value($object, $field_name, $request) {
    return get_post_meta($object->ID, $field_name, true);
}

add_action('rest_api_init', 'add_custom_fields_to_rest_api');

Что я делаю неправильно?

🤔 А знаете ли вы, что...
С PHP можно работать с файлами и директориями на сервере.


2
50
2

Ответы:

Решено

Проблема заключается в том, как вы получаете доступ к сообщению ID в функции get_custom_field_value. Параметр $object следует рассматривать как массив, а не как объект.

Вот как должен выглядеть ваш код:

function add_custom_fields_to_rest_api() {
    register_rest_field(
        'my_custom_post_type',
        'my_custom_field',
        array(
            'get_callback' => 'get_custom_field_value',
            'update_callback' => null,
            'schema' => null,
        )
    );
}

function get_custom_field_value($object, $field_name, $request) {
    return get_post_meta($object['id'], $field_name, true);
}

add_action('rest_api_init', 'add_custom_fields_to_rest_api');

В функции get_custom_field_value$object['id'] корректно обращается к сообщению ID. Это должно гарантировать, что my_custom_field появится в ответе REST API, как и ожидалось.


add_action('rest_api_init', 'restapi_fetch_data');
function restapi_fetch_data()
    {
        register_rest_route( 'testapidata', '/getalldata', array(
                            array(
                                    'methods'             => 'GET',
                                    'callback'            => 'get_items_all_data',
                                    'args'                => array(),
                            )
                            ) 
        );
        register_rest_route( 'testapidata', '/getproductdata', array(
                            array(
                                    'methods'             => 'GET',
                                    'callback'            => 'getproduct_all_data',
                                    'args'                => array(),
                            )
                            ) 
        );
    }
function get_items_all_data()
    {
        $result=array();
        $result['name'] ='hello';
        return $result;
    }
function getproduct_all_data()
    {
        $product_all_result = array();
        $pro_args = array(
                    'status'    => array('publish' ),
                    'type'      => array_merge( array_keys( wc_get_product_types() ) ),
                    'limit'     => -1,
                    'orderby'   => 'ID'
                );
        $products_all_data = wc_get_products( $pro_args );
        foreach ($products_all_data as $products_all_data_key => $products_all_data_value) {
            $product_all_result[$products_all_data_key]['id'] = $products_all_data_value->get_id();
            $product_all_result[$products_all_data_key]['name'] = $products_all_data_value->get_name();
        }
        
        return $product_all_result;
    }