Как по REST API WordPress загрузить изображение в медиа менеджер

Как по REST API WordPress загрузить изображение в медиа менеджер

Здравствуйте. В сегодняшней статье, мы рассмотрим загрузку изображений в media manager Вордпресс посредством API, с использованием его core функций.
Сегодня мы немного усложним себе задачу путем использования крона. Т.к. наш код должен будет выполняться по крону с периодичностью в 10 сек.
Приступим. Первым делом создадим кастомный временной диапазон через который будет срабатывать наш крон. Для этого в WP есть специальный фильтр “cron_schedules”:

add_filter('cron_schedules', function ($schedules)
{
	$schedules['10sec'] = [
		'interval' => 10,
		'display'  => __('Every 10 sec'),
	];
	return $schedules;
});

в нашем случае, к переменной “$schedules” мы добавим еще один массив, ключом которого будет наш интервал. В котором “interval” - длительность интервала в секунду, “display” - название интервала.

 

В листинге ниже:

add_action('wp', function(){
	if(!wp_next_scheduled('rest_api_media'))
	{
		wp_schedule_event( time(), '10sec', 'rest_api_media');
	}
});

выполняем вызов созданного чуть позже нами хука, с периодичностью в 10 сек.
WordPress функция “wp_next_scheduled('rest_api_media')”, проверяет, нужно ли в это время вызывать хук переданный в аргументе или еще подождать. Если время пришло - вызываем хук через ф-ю “wp_schedule_event”, и устанавливаем временную метку.

И основной код, отвечающий за upload изображений по API в наш или сторонний сайт на WordPress:

add_action('rest_api_media', function ()
{
	$username = 'admin';
	$password = 'qweqwe';
	$headers = [
		'Authorization' => 'Basic ' . base64_encode($username . ':' . $password),
	];

	
	$url = мой-сайт/wp-json/wp/v2/media/';
	$file = __DIR__ . '/data/book.jpg';
	$headers['Content-Disposition'] = 'attachment; filename="' . basename($file) . '"';
	$response = wp_remote_post($url, [
		'headers' => $headers,
		'body' => file_get_contents($file)
	]);


	$records = json_decode(
		wp_remote_retrieve_body($response), 
		true
	);

	echo '<strong>Code:</strong> ' . wp_remote_retrieve_response_code($response);
	echo '<br>';
	echo '<strong>Message:</strong> ' . wp_remote_retrieve_response_message($response);
	echo '<br>';
	echo '<strong>Records:</strong> ' . count($records);
	echo '<br>';
	echo '<strong>Answer:</strong>';

	echo"<pre>\$records = ";print_r($records);echo"</pre>";
	// die;
});

Загрузка изображений по АПИ, для меня была самой сложной частью работы с АПИ. Т.к. информации по данной теме в интернете практически не было. А та которая была, мне никак не помогла.
Рассмотрим подробнее код выше. В первых строках мы настраиваем заголовки для авторизации. Это важная часть, т.к. без этого мы не сможем ничего загрузить на наш сайт.

 

Здесь:

$url = мой-сайт/wp-json/wp/v2/media/';
$file = __DIR__ . '/data/book.jpg';
$headers['Content-Disposition'] = 'attachment; filename="' . basename($file) . '"';
$response = wp_remote_post($url, [
	'headers' => $headers,
	'body' => file_get_contents($file)
]);

Указываем URL сайта для которого будет загружаться файл.

 

В переменной “$file”, полный путь к файлу.

И заголовок, указывающий имя загружаемого файла:

$headers['Content-Disposition'] = 'attachment; filename="' . basename($file) . '"';

Далее, через функцию “wp_remote_post”, мы отправляем содержимое файла, записав его в индекс массива “body”, предварительно считав содержимое файла:

 

$response = wp_remote_post($url, [
	'headers' => $headers,
	'body' => file_get_contents($file)
]);

В ответ, АПИ сайта, отдаст нам подробную информацию о загруженном файле. Которую мы можем изучить через отладочный код ниже:

 

$records = json_decode(
	wp_remote_retrieve_body($response), 
	true
);

echo '<strong>Code:</strong> ' . wp_remote_retrieve_response_code($response);
echo '<br>';
echo '<strong>Message:</strong> ' . wp_remote_retrieve_response_message($response);
echo '<br>';
echo '<strong>Records:</strong> ' . count($records);
echo '<br>';
echo '<strong>Answer:</strong>';

echo"<pre>\$records = ";print_r($records);echo"</pre>";

На этом все, загрузка изображений закончена.

 

Поделиться в соцсетях:
Статьи на похожую тематику

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

Оставить комментарий

Ваш адрес email не будет опубликован.