USドル・円をレート換算して金額を表示する方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

完成イメージ

現在の為替
  • 1ドルは、約157円です。
  • 100円は、約0.64ドルです。

使用方法

以下にショートコードを示します。

[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を活用して最新の為替レートを取得し、サイト訪問者に分かりやすく金額を表示できます。

タイトルとURLをコピーしました