Да, вы можете расширить API WP REST практически любым способом. Вы можете добавить любые маршруты, которые хотите, с помощью функции register_rest_route()
.
Например, у меня есть пара пользовательских типов записей, которые опираются на информацию из других реляционных баз данных и таблиц.
foreach( $ext_post_types as $post_type ){
$post_type = pluralize($post_type);
register_rest_route( 'ext/v1', "/{$post_type}/(?P<ID>\d+)", array(
'methods' => 'GET',
'callback' => "extended_api_endpoint_{$post_type}"
) );
}
Внутри каждой функции обратного вызова я обрабатываю все необходимые мне данные из другие таблицы, тип сообщения и т. д. c
function extended_api_endpoint_props( $data ){
$external_data = get_external_relational_data( absint($data['ID']) );
if( empty( $external_data ) ){
return null;
}
$return = array();
foreach( $external_data as $data_id ){
$return[] = generate_json_data( $data_id );
}
return $return;
}
Это позволяет мне извлекать всю необходимую информацию (функция get_external_relational_data()
- это функция, использующая $wpdb
класс для извлечения всего, что я хочу из пользовательских таблиц, а затем у меня есть другая пользовательская функция, которая возвращает его в действительном API-интерфейсе WP REST JSON формат generate_json_data()
, а затем возвращает данные.
Это позволяет мне получите доступ к https: // [MYSITE] .com / wp-json / ext / v1 / props / 12345 , чтобы получить всю информацию о моей пользовательской базе данных, оставаясь при этом встроенной в WP REST API.