Шорткод курсу валют за допомогою 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]' );
?>
Для прикладу я вивів курс валют у віджеті на боковій панелі: