質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

994閲覧

WPでショートコード用に作った記述(内容)を、single.php などでも使いたい

j123

総合スコア15

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/06/19 02:45

編集2021/06/19 08:33

ショートコード用に作った記述(内容)を、single.php などでも使いたい

WordPressで作成しているサイトにて、商品の通常価格と販売価格を簡単に出力しようと、
投稿記事の管理画面にオリジナルのカスタムフィールドを作り、そこへ数字(価格)だけを入力し、
その情報を投稿の管理画面内にショートコードで出力できるように、functions.phpに以下の記述を作り、
投稿ページでは出力できるようになりました。
###functions.php

PHP

1<?php 2// ショートコード作成 3function regular_price_shortcode(){ 4 $price1 = get_post_meta(get_the_ID(), 'regular_price', true); 5 if (empty($price1)){//数値がない場合は何もいれない 6 return null; 7 }else{ 8 return '<span class="Price1">¥' . $price1 . ' </span>'; 9 } 10} 11add_shortcode( 'regularPrice', 'regular_price_shortcode' ); 12 13function current_price_shortcode(){ 14 $price2 = get_post_meta(get_the_ID(), 'current_price', true); 15 if (empty($price2)){//数値がない場合は何もいれない 16 17 return null; 18 }else{ 19 return '<span class="Price2">→ ¥' . $price2 . '</span>'; 20 } 21} 22add_shortcode( 'currentPrice', 'current_price_shortcode' ); 23?>

ですが、この情報を投稿の管理画面外で使いたく(サイドバーやフッターなどでも)、
single.phpなどに以下の記述をしたのですが、
全ての画像が読み込まれなくなり、出力もされてくれません。
(html,cssの文字情報等は問題なし)

###single.php

php

1〜〜〜 2<figcaption> 3 <?php $price1 = get_post_meta(get_the_ID(), 'regular_price', true); 4 if (empty($price1)){//数値がない場合は何もいれない 5 return null; 6 }else{ 7 return '<span class="Price1">¥' . $price1 . ' </span>'; 8 }?> 9 <?php $price2 = get_post_meta(get_the_ID(), 'current_price', true); 10 if (empty($price2)){//数値がない場合は何もいれない 11 return null; 12 }else{ 13 return '<span class="Price2">→ ¥' . $price2 . '</span>'; 14 }?> 15</figcaption> 16〜〜〜

だいぶ色々試してみたのですが、
もうお手上げ状態となりましたので、
何が間違い、原因かお分かりになる方おられましたら、
教えていただけないでしょうか?

よろしくお願いいたします。

補足

html,cssに関しては問題なく使用できるのですが、PHPに関してはほぼ初心者です。
見よう見まねで作っていますので、無駄な記述をしているかもしれません。

ですので、もし効率的な書き方があれば、
そちらも合わせて教えていただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/06/19 04:14 編集

全ての画像というのは、ショートコード以外の画像も含めて表示されないということでしょうか?
j123

2021/06/19 04:42

CHERRYさん、 全ての画像はそのページ全体に使われている画像(SVG以外)がLoadingの状態になって表示されませんでした。 (ショートコードでは数字情報のみを引っ張っています。) よろしくお願いいたします。
CHERRY

2021/06/19 04:58 編集

遅延読み込みしている画像が表示されないような感じでしょうか? そのページのHTML は、最後まで読み込まれていますか?  具体的には、Webブラウザで、htmlソースを確認すると 最後の</html> までありますか?
j123

2021/06/19 08:40

そうです。画像は遅延読み込みさせていたため、その画像が表示されなかったようです。 htmlの閉じタグはありました。 今回は遅延読み込み等の問題ではなかったようですが、 検証の際の目の付け所?を教えていただきありがとうございます!
guest

回答1

0

ベストアンサー

テンプレート上で普通に出力するならreturnじゃなくecho

emptyだったらnullじゃなく、!emptyだったらechoすれば良いんじゃないか

投稿2021/06/19 03:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

j123

2021/06/19 04:36 編集

Space-Monkeyさん、 ご回答ありがとうございます! 「return」を「echo」に変更したところ、 無事表示されてくれました。 ありがとうございます! ただ、 >emptyだったらnullじゃなく、!emptyだったらechoすれば良いんじゃないか これの意味が少しわからないのですが、 emptyを使う時は nullを使えない?ということでしょうか? !emptyとemptyの違いがイマイチ、、、なのですが、 emptyではなく、 !emptyとechoを使えば大丈夫ということでしょうか? 今後のために追加で教えていただけないでしょうか? よろしくお願いいたします!
退会済みユーザー

退会済みユーザー

2021/06/19 07:59

変数が空か否かで表示を変えるならelseを使えば良いが、そうでないならelseでの分岐は不要。 if (empty($price1)){ echo '$price1は空です' }else{ echo '$price1は空ではありません' } この場合、$price1が空だと表示は『price1は空です』になり、そうでなければ『price1は空ではありません』になる。 だから変数が空ではない場合のみ出力するだけで良いなら if (!empty($price1)){ echo '$price1は空ではありません' } だけで良い。 結局こういうことになる。 <figcaption> <?php $price1 = get_post_meta(get_the_ID(), 'regular_price', true); if (!empty($price1)){ echo '<span class="Price1">¥' . $price1 . ' </span>'; }?> <?php $price2 = get_post_meta(get_the_ID(), 'current_price', true); if (!empty($price2)){ echo '<span class="Price2">→ ¥' . $price2 . '</span>'; }?> </figcaption> これはショートコードの方も同じこと。 尚、独自にincludeしない限りfunction.phpではなくfunctions.phpだろうな。
j123

2021/06/19 08:31

なるほど。そういうことだったんですね。 全てクリアになりました。 かなりスッキリしますね。 まさに求めていた答えです! 教えていただくとわかる(理解できる)のですが、 自力ではなかなか辿り着けないので、 すごく助かります! ありがとうございました! P.S. functions.phpですね。何も意識せず書いて間違えていました^^; 訂正しますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問