Cocoonフォーラム

サイト内検索
書き込みの前に以下の3点をご確認ください。
  1. 1つのトピックにつき1つの質問を書き込んでください
  2. 不具合・カスタマイズ対象ページのURLを提示高速化を無効にしてください
  3. 該当部分のキャプチャ・環境情報とともに書き込んでいただけると助かります

何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。

不具合・カスタマイズ対象ページのURL:

相談内容:

不具合の発生手順:

解決のために試したこと:

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。

環境情報の取得方法はこちら。
https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
https://wp-cocoon.com/theme-trouble/

フォーラム利用ガイドリンク

  1. フォーラムガイドライン
  2. よくある質問と答え(FAQ)
  3. サポート対象外のケース
  4. 原因不明の不具合用トラブルシューティング
  5. トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw
  6. 真っ白画面でのエラーメッセージの確認方法
  7. ブラウザ環境チェックツール
  8. Cocoonカスタマイズ依頼

フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。

ショートコードの追加
 
共有:
通知
すべてクリア

ショートコードの追加

13 投稿
2 ユーザー
0 Reactions
36 表示
(@mikemekohome)
Active Member Registered
結合: 24時間前
投稿: 6
トピックスターター  

お世話になっております。

【要望】
ドル円換算を一箇所変えるだけで、すべて変わるようなショートコードの設定は出来ないでしょうか?

たとえば設定でどこかで145と入力。
するとショートコードでドルで記入した場所が

「金額は30ドルです。日本円に換算すると[convert from="30"]円」

上記が

「金額は30ドルです。日本円に換算すると4,350円」

のように表示するようなショートコードが欲しいです。
出来れば3桁カンマ区切りで表示できればなお良いです。

一日一回「145」の部分だけ変えれば、すべて変わるようになると非常に助かるのですが、可能でしょうか?

応用として、消費税等が上がったり、下がったりした場合も
一箇所1.1と入力すると
「金額は税抜きで1000円。税込みで[convert from="1000"]円」

上記が
「金額は税抜きで1000円。税込みで1,100円」
となり、全部の金額を書き直さなくても、一箇所設定を書き直せば変更されるようになると思います。

過去の質問を見るとAPIサービスを使った質問がありましたが、リアルタイムで変更する必要はなく、ショートコードを使っての解決策ではないので、あえて質問して見ました。

どうかご検討お願いいたします。


   
引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

●回答

Open Exchange Ratesなどを使用せずあらかじめ設定した換算値で変換します。
円⇔ドル換算ショートコード

/**
 * 通貨換算ショートコード [convert_money]
 *
 * 金額と通貨コード(JPY, USD)を指定して、日米間の通貨換算を行うショートコードです。
 *
 * 使用例:
 * [convert_money amount="1000" from="JPY" to="USD"]
 *
 * @param array $atts ショートコード属性:
 *   - amount (float):  変換する金額。
 *   - from (string):   変換元通貨コード("JPY"または"USD")。
 *   - to (string):     変換先通貨コード("JPY"または"USD")。
 * @return string       換算結果の文字列(例: "約1,000円")またはエラーメッセージ。
 */
add_shortcode('convert_money', function($atts) {
  $atts = shortcode_atts(array(
    'amount' => 0,
    'from'   => '',
    'to'     => '',
  ), $atts);

  $USD_TO_JPY_RATE = 150.0; // 換算レート:1ドル = 150円
  $amount = floatval($atts['amount']);

  $from_currency = strtoupper($atts['from']);
  $to_currency   = strtoupper($atts['to']);

  if ($amount <= 0 || !in_array($from_currency, ['JPY', 'USD']) || !in_array($to_currency, ['JPY', 'USD'])) {
    return "ショートコードの使い方が正しくありません。";
  }

  if ($from_currency === $to_currency) {
    $converted_amount = $amount;
    $to_symbol = ($to_currency === 'JPY') ? '円' : 'ドル';
  } else {
    if ($from_currency === 'JPY' && $to_currency === 'USD') {
      $converted_amount = $amount / $USD_TO_JPY_RATE;
      $to_symbol = 'ドル';
    } elseif ($from_currency === 'USD' && $to_currency === 'JPY') {
      $converted_amount = $amount * $USD_TO_JPY_RATE;
      $to_symbol = '円';
    }
  }

  // 四捨五入してカンマ区切り
  $converted_amount = number_format(round($converted_amount));

  return "約{$converted_amount}{$to_symbol}";
});

   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

金額税率変換

/**
 * 消費税込み金額計算ショートコード [money_tax]
 *
 * 税抜き金額と定数で定義された税率(10%)を元に、消費税込み金額を計算し表示します。
 * 計算結果は四捨五入され、3桁カンマ区切りで表示されます。
 *
 * 使用例:
 * [money_tax amount="1000"]
 *
 * @param array $atts ショートコード属性:
 *   - amount:      税抜き金額。
 * @return string   計算結果の文字列(例: "1,100円")またはエラーメッセージ。
 */
add_shortcode('money_tax', function($atts) {
  $atts = shortcode_atts(array(
    'amount' => 0,    // 税抜き金額
  ), $atts);

  $TAX_RATE = 0.10;   // 税率

  $amount_tax = intval($atts['amount']);

  // 入力値の基本的な検証
  if ($amount_tax <= 0) {
    return "ショートコードの使い方が正しくありません。";
  }

  // 税込み金額の計算
  $amount_tax = $amount_tax * (1 + $TAX_RATE);

 // 四捨五入してカンマ区切り
  $converted_amount = number_format(round($amount_tax));

  return "{$converted_amount}円";
});

   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

私はショートコードは、各ユーザが用途に応じ、各自で作成するものを思っています。

また、ショートコードは定型化したコードです。
難しくないので、これを機に勉強してください。


   
返信引用
(@mikemekohome)
Active Member Registered
結合: 24時間前
投稿: 6
トピックスターター  

大門未知子様

有難うございます。

ご指摘は十分わかります。
簡単なので勉強せい!
それもわかります。

わかりますけど、
function書き換え。
ドル円変動を毎日書き換え。

上記をCocoonのショートコード設定で設定していただけたらどれだけ楽ちんか?

との提案なんですよ。

現状「〇〇ドル。日本円だと〇〇円。」
この状態で長い間放置されているブログがいかに多いか。

わたし含め、やはり敷居が高いと思うのですよね。


   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

投稿者:: @mikemekohome

ドル円変動を毎日書き換え。

上記をCocoonのショートコード設定で設定していただけたらどれだけ楽ちんか?

この考えは作る側からすると、使用が限られ、円ドルレートだけのために、Cocoon設定画面に追加するのは工数がかかり望ましくありません。

また、実現するならプラグインの機能で、テーマが持つ機能ではありません。

それなら、自動でレートを取得するショートコードの方が望ましいです。

以下に公開しているフリーのレートを取得APIを用い、レート換算するショートコードを示します。

/**
 * 通貨換算ショートコード [convert_money]
 *
 * 金額と通貨コード(JPY, USD)を指定して、日米間の通貨換算を行うショートコードです。
 * Frankfurter APIを利用して最新の為替レートを自動取得します。
 *
 * 使用例:
 * [convert_money amount="1000" from="JPY" to="USD"]
 *
 * @param array $atts ショートコード属性:
 * - amount (float):  変換する金額。
 * - from (string):   変換元通貨コード("JPY"または"USD")。
 * - to (string):     変換先通貨コード("JPY"または"USD")。
 * @return string       換算結果の文字列(例: "約1,000円")またはエラーメッセージ。
 */
add_shortcode('convert_money', function($atts) {
  $atts = shortcode_atts(array(
    'amount' => 0,
    'from'   => '',
    'to'     => '',
  ), $atts);

  $amount = floatval($atts['amount']);
  $from_currency = strtoupper($atts['from']);
  $to_currency   = strtoupper($atts['to']);

  // Frankfurter APIからUSD/JPYレートを自動取得
  $USD_TO_JPY_RATE = null;

  $api_url = "https://api.frankfurter.app/latest?from=USD&to=JPY";
  $response = wp_remote_get($api_url);

  // レスポンスのチェック
  if (is_wp_error($response)) {
    return "為替レートの取得に失敗しました: " . $response->get_error_message();
  }

  $body = wp_remote_retrieve_body($response);
  $data = json_decode($body, true);

  // 取得したデータの検証
  if (json_last_error() !== JSON_ERROR_NONE) {
    return "為替レートデータの解析に失敗しました。";
  }

  if (isset($data['rates']['JPY'])) {
    $USD_TO_JPY_RATE = $data['rates']['JPY'];
  } else {
    // APIから期待するレートが得られなかった場合
    return "USDからJPYへの為替レートが見つかりませんでした。";
  }

  // レートが有効な数値であることを確認
  if (!is_numeric($USD_TO_JPY_RATE) || $USD_TO_JPY_RATE <= 0) {
      return "取得された為替レートが無効です。";
  }

  // --- レート取得ここまで ---

  if ($amount <= 0 || !in_array($from_currency, ['JPY', 'USD']) || !in_array($to_currency, ['JPY', 'USD'])) {
    return "ショートコードの使い方が正しくありません。";
  }

  $converted_amount = 0;
  $to_symbol = '';

  if ($from_currency === $to_currency) {
    $converted_amount = $amount;
    $to_symbol = ($to_currency === 'JPY') ? '円' : 'ドル';
  } else {
    if ($from_currency === 'JPY' && $to_currency === 'USD') {
      // JPYからUSDへの変換: JPY金額 / USD_TO_JPY_RATE
      $converted_amount = $amount / $USD_TO_JPY_RATE;
      $to_symbol = 'ドル';
    } elseif ($from_currency === 'USD' && $to_currency === 'JPY') {
      // USDからJPYへの変換: USD金額 * USD_TO_JPY_RATE
      $converted_amount = $amount * $USD_TO_JPY_RATE;
      $to_symbol = '円';
    }
  }

  // 四捨五入してカンマ区切り
  $converted_amount = number_format(round($converted_amount));

  return "約{$converted_amount}{$to_symbol}";
});
この投稿は22時間前 3回ずつ大門未知子に変更されました

   
返信引用
(@mikemekohome)
Active Member Registered
結合: 24時間前
投稿: 6
トピックスターター  

大門未知子様

ありがとうございます。
ありがとうございます。
ありがとうございます。

今回わたしの疑問に関しては個別に解決可能だと思います。

ただ、他の方の意見も聞きたい。

特に特定の設定一つ変えるだけで、全ての数字を変更出来る
ショートコードが欲しいという意見は凡庸性ないですかね?

為替に関してはドル円関係なく、掛ければいいだけです。
消費税もそうです。
更に、足すだけ、引くだけ等いくらでも応用範囲多いと思うのですが、
「作る側からすと。。」

現実的では無いのですか?


   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

投稿者:: @mikemekohome

為替に関してはドル円関係なく、掛ければいいだけです。
消費税もそうです。

そう思うならご自身で作ればいいのでは??

言われる通りです、コードの通り税率、為替レートを変数に設定し、計算しているだけです。

都度、税率、為替レートを変更したいと言う要望です。
その為には設定画面を作る必要があります(図参照、Cocoon設定とは別に作成)。

その点はご理解頂きたいです。

この投稿は21時間前 2回ずつ大門未知子に変更されました

   
返信引用
(@mikemekohome)
Active Member Registered
結合: 24時間前
投稿: 6
トピックスターター  

大門未知子様

設定画面を作る。

上記が「作る側」からしたら現実的ではないという指摘ですね。
この辺の苦労はわたし自身わからないので、無理だといわれれば、そうですか。としか言えません。

大門未知子様のご説明で、わたし自身の疑問は解消出来そうですが、
その上で他の方や、わいひら様がどう思ってるか聞きたいです。


   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

●ご参考

[Cocoon設定]→[その他]に反映してみました。
それか分けて「吹き出し」のようなサブメニューかな?

この投稿は20時間前ずつ大門未知子に変更されました

   
返信引用
(@mikemekohome)
Active Member Registered
結合: 24時間前
投稿: 6
トピックスターター  

大門未知子様

すごい。
厳しい指摘とともに、解決策を速攻で提示していただけるのはありがたい。
わたしの要望に関しては完璧です。

ただ、改めて、他の方は為替の表示に関してどう思っていたのが気になる。

「為替」で検索しても、あまり出てこない。
みなさん今までこれで納得していたのか?

あるいは自己解決出来ていたのか?


   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3624
 

為替レートのように都度変化するものは、人手で入力するものではないと思います。
先の自動取得ショートコード+為替レートをキャッシュ保存。

税率はそうそう変わらないでの、プログラムの定数値を変更すれば十分かと。

結果、個別に子テーマのfunctions.phpにコードを入力すれば十分なのでは?と思え。

判断は、わいひらさんに任せます。


   
返信引用
(@mikemekohome)
Active Member Registered
結合: 24時間前
投稿: 6
トピックスターター  

大門未知子様

原則論として
「〇〇すべきではない」

サイト運営者としては
「〇〇をしたい」

上記どちらを重視すべきか。

大門未知子氏的には原則論だろうけど、
サイト運営者的には「〇〇をしたい」

この2つの主張にわいひら氏がどう対応するか?

少なくともわたしは、原則論重視だが、例外的に個別で〇〇したいので対応してください。
この主張に「原則論では違う」と主張しても意味ないと思うがどうでしょうか?

現実的に対応出来ないので無理ですと言われれば仕方ないですけど。


   
返信引用
共有:

問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。

また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。

「いいね!」機能はフォーラム登録者のみが利用できる機能です。

CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。

フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。

最近の書き込みはこちら。

詳細なカスタマイズ依頼をするならこちら。

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