Шорткод курсу валют за допомогою WordPress API

Привіт:) У цьому пості покажу, як за допомогою WordPress API створити шорткод із курсом валют.

Курс валют буду брати із офіційного джерела — онлайн-ресурсу https://bank.gov.ua. Щоб прискорити завантаження сторінки, закешую отриманий результат на 12 годин.

/**
 * Курси валют через API
 * 
 * Через HTTP-запит отримуємо курс долару зі стороннього сайту. 
 * Щоб прискорити завантаження сторінки, потрібно закешувати отриманий результат на 12 годин.
 * 
 * https://bank.gov.ua/ua/open-data/api-dev
 * https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange - XML (Курс на поточну дату)
 * 
 * https://wp-kama.ru/id_6462/wordpress-http-api.html
 * 
 * Виклик шорткоду для виведення результату:
 * 
 * [mp_dollar_exchange_rates]
 * 
 * АБО
 * 
 * echo do_shortcode( '[mp_dollar_exchange_rates]' );
 * 
 */
add_shortcode( 'mp_dollar_exchange_rates', function() {
	ob_start();

	// назва тимчасової опції
	$transient = 'dollar_exchange_rates';

	// отримуємо збережені дані
	$usdInUah = get_transient( $transient );

	// print_r( $usdInUah );
	
	// якщо даних нема або вони прострочені, отримаємо їх і збережемо
	if ( ! $usdInUah ) {
		$url = 'https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange';

		// час життя кешу - півдня
		$expiration = DAY_IN_SECONDS / 2;

		// отримаємо дані
		$resp = wp_remote_get( $url );

		// якщо статус відповіді "200 - ОК"
		if ( wp_remote_retrieve_response_code( $resp ) === 200 ) {
			// отримуємо тіло (контент) відповіді
			$body = wp_remote_retrieve_body( $resp );

			// парсимо XML-дані
			$xml = simplexml_load_string( $body );

			// перетворимо на звичайний об'єкт
			$data = json_decode( json_encode( $xml ) );

			// echo '<pre>';
			// print_r( $data );
			// echo '</pre>';

			// отримаємо дані лише USD
			$USD = wp_list_filter( $data->currency, array( 'cc'=>'USD' ) );
			$USD = array_shift( $USD );

			/*
			stdClass Object (
				[r030] => 840
				[txt] => Долар США
				[rate] => 36.5686
				[cc] => USD
				[exchangedate] => 22.09.2022
			)
			*/

			$usdInUah = $USD->rate;	

		} else {
			// якщо статус відповіді НЕ "200 - ОК"
			$usdInUah = 'дані відсутні';
		}

		// збережемо курс долару до тимчасової опції
		set_transient( $transient, $usdInUah, $expiration );
	}

	echo 'Курс долару на сьогодні: 1$ = ' . $usdInUah . ' грн.';

	// видалення тимчасової опції (напр., при видаленні плагіну)
	// delete_transient( 'dollar_exchange_rates' );

	return ob_get_clean();
});
У коді для тимчасового зберігання курсу валют використовуються функції для роботи із тимчасовими опціями бази даних (транзієнтами). Також цього можна добитися за допомогою вбудованого кешу WordPress — функції wp_cache_set() та wp_cache_get().

Для виведення курсу використовуйте шорткод [mp_dollar_exchange_rates] (наприклад, у віджеті). Якщо потрібно вставити у файл-шаблон теми, використовуйте наступний код

<?php
echo do_shortcode( '[mp_dollar_exchange_rates]' );
?>

Для прикладу я вивів курс валют у віджеті на боковій панелі:

Михайло Петров
Михайло Петров

Мене звати Михайло. Я є WordPress-розробником. Створюю сайти з "нуля", розробляю плагіни, оновлюю наявний функціонал та підтримую готові проєкти.

Залишити відповідь

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