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

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

Продовжуємо розбирати тему самостійно створених ендпоінтів у WordPress. Сьогодні ми навчимося оновлювати дані в базі даних за допомогою API WordPress.

Повний код прикладу сьогоднішнього уроку:

<?php
add_action('rest_api_init', function()
{
	/**
	 * Update
	 */
	register_rest_route('app/v1', 'update', [
		'methods' => WP_REST_Server::EDITABLE,
		'permission_callback' => function(WP_REST_Request $Request)
		{
			if($Request -> get_param('key') != '123qwe')
			{
				return new WP_Error('key', 'API KEY is wrong', [
					'status' => 400
				]);
			}

			$Post = get_post( $Request -> get_param('post_id') );

			return is_a($Post, 'WP_Post');
		},
		'callback' => function(WP_REST_Request $Request)
		{
			$post_id = wp_update_post([
				'ID' => $Request -> get_param('post_id'),
				'post_title' => wp_strip_all_tags( $Request -> get_param('post_title') ),
				'post_content' => $Request -> get_param('post_content'),
			]);
			
			return get_post( $post_id );
		},
		'args' => [
			'key' => [
				'description' => 'API KEY',
				'type'=> 'string',
				'required' => true,
			],
			'post_id' => [
				'description' => 'Post ID',
				'type'=> 'integer',
				'required' => true,
			],
			'post_title' => [
				'description' => 'Post title',
				'type'=> 'string',
				'required' => true,
			],
			'post_content' => [
				'description' => 'Post content',
				'type'=> 'string',
				'required' => true,
			],
		]
	]);
});

Для тестування ви можете використати наступний URL — “адреса.сайту/wp-json/app/v1/update?key=123qwe&post_id=59&post_title=Морква&post_content=Морква посівна — дворічна рослина, овочева культура, підвид дикої моркви.”. У запиті не забудьте замінити домен “адреса.сайту” на ваш. Для запиту можна використовувати “Postman”, CURL PHP або будь-який інший зручний спосіб.

Щодо коду. На відміну від створення даних через API, у цьому прикладі нам додатково потрібно передати ID запису, який ми хочемо оновити. У нашому прикладі це параметр “post_id”, який є обов’язковим:

'args' => [
	'key' => [
		'description' => 'API KEY',
		'type'=> 'string',
		'required' => true,
	],
	'post_id' => [
		'description' => 'Post ID',
		'type'=> 'integer',
		'required' => true,
	],
	'post_title' => [
		'description' => 'Post title',
		'type'=> 'string',
		'required' => true,
	],
	'post_content' => [
		'description' => 'Post content',
		'type'=> 'string',
		'required' => true,
	],
]

У функції “register_rest_route” не забуваємо вказувати метод запиту “POST”, “PUT” або “PATCH”, або ж WP-константу WP_REST_Server::EDITABLE.
Також трохи ускладнилася перевірка вхідних параметрів:

'permission_callback' => function(WP_REST_Request $Request)
{
	if($Request -> get_param('key') != '123qwe')
	{
		return new WP_Error('key', 'API KEY is wrong', [
			'status' => 400
		]);
	}

	$Post = get_post( $Request -> get_param('post_id') );

	return is_a($Post, 'WP_Post');
},

Окрім перевірки ключа, ми також перевіряємо наявність запису в БД за допомогою функції “is_a” (тобто, якщо змінна $Post є об’єктом типу WP_Post, то повертається TRUE і запит продовжується. Інакше — функція повертає FALSE і припиняє виконання).

Основна логіка запиту зосереджена в колбеку:

'callback' => function(WP_REST_Request $Request)
{
	$post_id = wp_update_post([
		'ID' => $Request -> get_param('post_id'),
		'post_title' => wp_strip_all_tags( $Request -> get_param('post_title') ),
		'post_content' => $Request -> get_param('post_content'),
	]);
	
	return get_post( $post_id );
},

У ньому, використовуючи WP-функцію “wp_update_post”, ми оновлюємо дані поста згідно з вхідними параметрами і повертаємо JSON-об’єкт у відповідь.

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

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

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

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