Я пытаюсь добавить настраиваемое поле в ответ 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 можно работать с файлами и директориями на сервере.
Проблема заключается в том, как вы получаете доступ к сообщению 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;
}