サイト内検索
Cocoonフォーラム
書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
Topic starter
2019年11月7日 03:26
評価スターを表示するためのget_rating_star_tag関数に2点の不具合があります。
1点目:評価スターのマニュアル( https://wp-cocoon.com/rating-star/ )には、
rateには、0.1刻みで評価数値を入力します。
...
異常値が入力された場合は、入力された文字列がそのまま表示されます。
とありますが、例えば小数第二位まである数値が指定されても、スター表示が数値と一致しないだけで文字列をそのまま返す形にはなっていません。
("4.11"だと4.5以上のスターが表示される。)
小数第一位までで刻むための処理を加えるか、または小数第一位未満でも正しく動作させるよう修正する必要があります。
2点目:numberオプションを1で指定した場合には、
評価数値を表示する
とありますが、0.1刻みだとすると小数第一位が0の場合は少数が表示されません。
(4.0の評価が4と表示される。)
この不具合の原因は、floatvalによるfloat型の変数を表示用の文字列としても扱っているからです。
また、get_the_review_rate関数もtype="range"のinputで保存された値をそのまま用いていることから、レビュー評価の表示で同様の問題が起きています。
わいひら reacted
Topic starter
2019年11月7日 18:54
少し補足しておきますと、小数第一位までの評価数値を表示させるためには少数第二位までの数値が必要です。
(実際にそのつもりでデータを取る仕組みを作っていた。)
評価スター関連の機能を小数第一位までとした場合、Cocoon側または外部で小数第一位までの評価数値を算出することになるはずですが、現在のコードでは算出の考慮がなされていないため、最初の投稿で示した2つの問題点が生じているということです。
[例]
"4.04"というデータが出た場合、外部で小数第一位までにして受け渡すときには"4.0"ですが、表示されるのは"4.0"ではなく"4"となり、数値の意味が変わってきます。
"4.45"は"4.5"として渡すことになりますが、実際の数値は"4.5"未満でも表示上は"4.5"以上となります。
一方で、"4.04"のまま渡すと"4.04"がそのまま表示され、このときは正しい表示になりますが、他の数値も一律で少数第二位まで渡すことになり、"4.05"は"4.5"以上として表示されます。
また、"4.00"も"4"と表示されます。
2019年11月7日 19:10
とりあえず、小数点第一位で数値を切り捨てするようにし、文字列での出力部分は、小数点第一位まで表示されるようにフォーマットを設定してみました。
https://github.com/yhira/cocoon/commit/0a1b4d43d008158dcd53c90ec8d19ef819177cd1
Topic starter
2019年11月7日 19:55
確認しました。
$rate = round($rate, 1);
でそのまま四捨五入すると、何か別の問題が生じたのでしょうか?
また、
get_the_review_rate関数もtype="range"のinputで保存された値をそのまま用いていることから、レビュー評価の表示で同様の問題が起きています。
については、修正がなければ自身で対応しようと思いますが、現状のままでいくということでよろしいでしょうか?
2019年11月8日 19:34
でそのまま四捨五入すると、何か別の問題が生じたのでしょうか?
特に。四捨五入の方が良かったですか?
説明ページに以下のように書いていたので、「小数点第一位まで有効」ということを機能としても強調した方が良いかなと思い、小数点第二位より下を切り捨てようと思っただけです。
rateには、0.1刻みで評価数値を入力します。
僕としては0.1刻みで使ってもらうには、こちらの方が良いかなと思っただけなので、どちらでも良いと言えばどちらでも良いです。
Topic starter
2019年11月8日 20:44
特に。四捨五入の方が良かったですか?
説明ページに以下のように書いていたので、「小数点第一位まで有効」ということを機能としても強調した方が良いかなと思い、小数点第二位より下を切り捨てようと思っただけです。
#post-24058で指摘したのは四捨五入が良いという意味ではなく、四捨五入でも切り上げ・切り捨てでもないという意味です。
$rate = round($rate, 1, PHP_ROUND_HALF_DOWN);
PHP_ROUND_HALF_DOWNを用いているので、仮に少数第二位まで投げたとすると
0.05 → 0.0
0.06 → 0.1
となります。
round関数は四捨五入するための関数なので、わいひら様は四捨五入での実装を判断したのだと思い、
$rate = round($rate, 1);
として、一般的な四捨五入である
0.04 → 0.0
0.05 → 0.1
ではダメなのか?ということでした。
切り捨てるという判断であれば、round関数ではなくfloor関数を用いるべきかと思います。
「レビュー評価の表示」というのは、タイトル下のことですか、それとも投稿設定画面の事でしょうか.それともJSON-LDの出力でしょうか。
どれかと言われれば、JSON-LDで用いられている部分です。
アプリ紹介メディアなどを見ても表示上の数値と一致、またはより細かい計算上の数値で出力(4.00、4.00163など)しているので、小数含む適切な数値として扱った方が良いのではないでしょうか。
わいひら reacted
2019年11月9日 22:32
失礼いたしました。
PHP_ROUND_HALF_DOWNに関しては、完全に誤用してました。
勝手に切り捨てだと思い込んでいました。よく見たらハーフダウンですね;
最初floorを使おうと思ったら、少し冗長な描き方になるかなと思ったので、roundのそっちで対応できるのかと勘違いしていました。
floorを使った書き方に修正しておきました。
https://github.com/yhira/cocoon/commit/8c9b675f3a5118948bedd16a483aa3e8a5d3f51a
あと、JSON-LD部分も小数点第一位表示するようにしておきました。
2019年11月13日 19:28
ご確認いただきありがとうございます!
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。