Як у WordPress через REST API видалити дані з БД використовуючи свій Endpoint та API KEY

Як у WordPress через REST API видалити дані з БД використовуючи свій Endpoint та API KEY

Сьогодні завершується серія статей про кастомні 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 ще далеко не вичерпана.

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *