はじめに
以下について回答します。
独自のショートコードを使用して、USドル⇔日本円のレートをリアルタイムで換算し金額を表示します。
為替レートの取得には「Frankfurter API」を利用します。
この記事では、この方法について説明します。
完成イメージ
使用方法
以下にショートコードを示します。
[my_convert_money]
| オプション | 説明 | 値 | 初期値 |
|---|---|---|---|
| money | 金額(必須) | 0 | |
| from | 変換前の通貨単位(必須) | USD=米ドル / JPY=日本円 |
実装手順
以下のコードをfunctions.phpに追加します。
add_shortcode('my_convert_money', function ($atts) {
$atts = shortcode_atts([
'money' => 0,
'from' => 'USD',
], $atts);
$amount = floatval($atts['money']);
$from_currency = strtoupper($atts['from']);
// 通貨マッピングを設定
$currency_map = [
'USD' => 'JPY',
'JPY' => 'USD',
];
// 対応していない通貨または金額が0以下の場合は処理対象外
if (!isset($currency_map[$from_currency]) || $amount <= 0) {
return 'ショートコードの使い方が正しくありません。';
}
$to_currency = $currency_map[$from_currency];
// キャッシュデータを取得
$cache_key = "rate_{$from_currency}_to_{$to_currency}";
$rate = get_transient($cache_key);
if (!$rate) {
$url = esc_url_raw("https://api.frankfurter.app/latest?amount=1&from={$from_currency}&to={$to_currency}");
$response = wp_remote_get($url);
// APIリクエストエラーの場合は処理終了
if (is_wp_error($response)) {
return '為替レートの取得に失敗しました: ' . esc_html($response->get_error_message());
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
// レスポンス解析エラーまたは為替レートが存在しない場合は処理終了
if (json_last_error() !== JSON_ERROR_NONE || !isset($data['rates'][$to_currency])) {
return '為替レートの解析に失敗しました。';
}
$rate = $data['rates'][$to_currency];
// 為替レートをキャッシュに保存
set_transient($cache_key, $rate, HOUR_IN_SECONDS);
}
// 為替レートが数値かつ0より大きいか検証
if (!is_numeric($rate) || (float) $rate <= 0) {
return '取得された為替レートが無効です。';
}
$converted_amount = $amount * (float) $rate;
$formatted_amount = ($to_currency === 'JPY')
? number_format(round($converted_amount)) . '円'
: number_format($converted_amount, 2) . 'ドル';
return '約' . $formatted_amount;
});
さいごに
今回紹介した方法を使えば、ショートコードで簡単にUSドルと日本円のリアルタイム為替換算が可能です。Frankfurter APIを活用して最新の為替レートを取得し、サイト訪問者に分かりやすく金額を表示できます。


