Сьогодні завершується серія статей про кастомні Endpoint-и та доступ до них через API ключ. У якості прикладу розглянемо ситуацію, коли потрібно видалити дані з бази даних за ID поста з попередньою перевіркою.
Код прикладу нижче:
<?php
add_action('rest_api_init', function()
{
/**
* Delete
*/
register_rest_route('app/v1', 'delete', [
'methods' => WP_REST_Server::DELETABLE,
'permission_callback' => function(WP_REST_Request $Request)
{
if($Request -> get_param('key') != '123qwe')
{
return new WP_Error('key', 'API KEY is wrong', [
'status' => 400
]);
}
return true;
},
'callback' => function(WP_REST_Request $Request)
{
$Post = get_post( $Request -> get_param('post_id') );
if(is_a($Post, 'WP_Post'))
{
return wp_delete_post($Post -> ID);
}
return false;
},
'args' => [
'key' => [
'description' => 'API KEY',
'type'=> 'string',
'required' => true,
],
'post_id' => [
'description' => 'Post ID',
'type'=> 'integer',
'required' => true,
],
]
]);
});У якості запиту можна використати наступний URL — “адреса.сайту/wp-json/app/v1/delete?key=123qwe&post_id=59”. При цьому метод запиту у функції “register_rest_route” повинен бути “DELETE” (або використовуйте константу WP_REST_Server::DELETABLE).
Обидва параметри key та post_id є обов’язковими:
'args' => [ 'key' => [ 'description' => 'API KEY', 'type'=> 'string', 'required' => true, ], 'post_id' => [ 'description' => 'Post ID', 'type'=> 'integer', 'required' => true, ], ]
Про це нам “говорять” ключі required, значення яких встановлено у TRUE.
У прикладі з видаленням поста я вирішив обмежитися перевіркою лише API ключа:
'permission_callback' => function(WP_REST_Request $Request)
{
if($Request -> get_param('key') != '123qwe')
{
return new WP_Error('key', 'API KEY is wrong', [
'status' => 400
]);
}
return true;
},Оскільки перевірку на наявність поста у БД ми виконаємо перед видаленням, перевіривши, чи існує пост із зазначеним ID, і якщо так — видалимо його:
'callback' => function(WP_REST_Request $Request)
{
$Post = get_post( $Request -> get_param('post_id') );
if(is_a($Post, 'WP_Post'))
{
return wp_delete_post($Post -> ID);
}
return false;
},Після видалення функція WordPress wp_delete_post поверне дані видаленого запису у вигляді об'єкта, і ми повернемо їх у відповідь у форматі JSON:
{
"ID": 57,
"post_author": "0",
"post_date": "2020-12-12 16:01:58",
"post_date_gmt": "2020-12-12 13:01:58",
"post_content": "Апельсин - найпоширеніша цитрусова культура у всіх тропічних і субтропічних областях світу",
"post_title": "Апельсин",
"post_excerpt": "",
"post_status": "publish",
"comment_status": "closed",
"ping_status": "closed",
"post_password": "",
"post_name": "apelsin",
"to_ping": "",
"pinged": "",
"post_modified": "2020-12-12 16:01:58",
"post_modified_gmt": "2020-12-12 13:01:58",
"post_content_filtered": "",
"post_parent": 0,
"guid": "адреса.сайту/fruit/apelsin/",
"menu_order": 0,
"post_type": "fruit",
"post_mime_type": "",
"comment_count": "0",
"filter": "raw"
}На цьому все, хоча тема REST API у WordPress ще далеко не вичерпана.
