前提
wordpressでショートコードを使って以下のような文章を出力したいと考えています。
「これは(A)のページです。評価の平均は(B)点、投稿は(C)件です。」
Aにはページで扱ってる商品の名前、
Bには商品に対する点数の平均値、
Cには評価の掲載数
が入ります。
該当ページには、Shortcode Star Ratingプラグインを使って、10件ほどの星評価(パーセンテージ形式)を表示させています。
[star rating="90" type="percent" numeric="yes"]
展開すると以下のようになります。
html
1<span class="shortcode-star-rating"> 2<span class="dashicons dashicons-star-filled"></span> 3<span class="dashicons dashicons-star-filled"></span> 4<span class="dashicons dashicons-star-filled"></span> 5<span class="dashicons dashicons-star-filled"></span> 6<span class="dashicons dashicons-star-half"></span> 7<span class="ssr-int">(90%)</span> 8</span>
BとCにはこのショートコードで出した評価の平均(B)と評価の掲載数(C)を出力させます。
そこで、以下のようなコードを作成し、function.phpに記載、該当記事に[review name="商品名"]と記載しました。
php
1function review_func($attr) { 2 $html = $content = do_shortcode(get_the_content()); 3 preg_match_all("/(([0-9]*)%)/", $html, $result); 4 $avg = array_sum($result[1]) / count($result[1]); 5 $cnt = count($result[1]); 6 7 print "これは".$attr[name]."のページです。評価の平均は".$avg."点、投稿数は".$cnt."件です。"; 8} 9add_shortcode('review', 'review_func');
本来なら、「これは商品名のページです。評価の平均は90点、投稿数は1件です。」と表示させたいところ、502エラーで表示されませんでした。
試したこと
php
1function review_func($attr) { 2 print "これは".$attr[name]."のページです。評価の平均はB点、投稿数はC件です。"; 3} 4add_shortcode('review', 'review_func');
平均と投稿数のところを消し、シンプルな(?)ショートコードの形にしたところ、
「これは商品名のページです。評価の平均はB点、投稿数はC件です。」
と望む通りの結果が得られています。
また、
php
1$html = $content = do_shortcode(get_the_content()); 2//get_the_content()の中身は[star rating="90" type="percent" numeric="yes"] 3preg_match_all("/(([0-9]*)%)/", $html, $result); 4$avg = array_sum($result[1]) / count($result[1]); 5$cnt = count($result[1]);
では、$avg=90、$cnt=1と望む結果が得られています。
ショートコードの数を増やしても、評価の数値を変えても、正しい結果が得られています。
なので、それぞれの表記は間違っていないかと思うのですが、これらを組み合わせてショートコードにしようとしたら502エラーとなってしまいます。
どうしたら望んだ通り「これは商品名のページです。評価の平均は90点、投稿数は1件です。」という結果が得られるようになるでしょうか?
回答1件
あなたの回答
tips
プレビュー