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

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

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

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

PHP

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

Q&A

1回答

2300閲覧

固定ページのカスタムフィールドに設定した複数画像をトップページでも出したい

raidomaru

総合スコア106

WordPress

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

PHP

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

0グッド

0クリップ

投稿2016/12/13 08:58

編集2016/12/14 06:31

###前提・実現したいこと
固定ページで並べて表示した画像をトップページのスライドと連動するようにしたいです。かつ、固定ページの編集ページで写真を増やせるようにしたいです。

宜しくお願い致します。

出力されるソースとしては写真の数だけ<li>の中に<img>としたいです。

html

1<li><img src="xxxx"></li> 2<li><img src="xxxx"></li>

###試したこと
カスタムフィールドに写真を登録し、どちらもショートコードで呼び出そうとしましたが、うまくいきません。

###発生している問題・エラーメッセージ
1枚の写真を出すことはできましたが、複数枚を出すことができません。

###該当のソースコード
functions.phpに下記ショートコードを作りました。
現状<li>タグは無視して進めてます。

php

1//写真呼出し用 2function imgFunc() { 3 $size = 'full'; 4 $img = get_post_meta(get_the_ID(325), '写真', true); 5 return 6 wp_get_attachment_image($img, $size); 7} 8add_shortcode('img', 'imgFunc');

修正後1

php

1//写真呼出し用 2function imgFunc() { 3 $img_ids = get_post_meta(get_the_ID(325), '写真', false); 4 // echo '<pre>'.var_dump($img_ids).'</pre>'; 5 for($i=0;$i<$img_ids;$i++){ 6 $img = wp_get_attachment_image_src($img_ids[$i], 'full'); 7 echo '<li><img src="'.$img[0].'"></li>'; 8 } 9} 10add_shortcode('img', 'imgFunc');

修正後2

php

1//写真呼出し用 2function imgFunc() { 3 $img_ids = get_post_meta(get_the_ID(325), '写真', false); 4 // echo '<pre>'.var_dump($img_ids).'</pre>'; 5 for($i=0;$i<$img_ids;$i++){ 6 $img = wp_get_attachment_image_src($img_ids[$i], 'full'); 7 if($img){ 8 echo '<li><img src="'.$img[0].'"></li>'; 9 } else { 10 return false; 11 } 12 } 13} 14add_shortcode('img', 'imgFunc');

修正後3

php

1//写真呼出し用 2function imgFunc() { 3 $img_ids = get_post_meta(get_the_ID(325), '写真', false); 4 // echo '<pre>'.var_dump($img_ids).'</pre>'; 5 for($i=0;$i<$img_ids;$i++){ 6 $img = wp_get_attachment_image_src($img_ids[$i], 'full'); 7 if($img){ 8 $output .= '<li><img src="'.$img[0].'"></li>'; 9 } else { 10 return false; 11 } 12 } 13 return $output; 14} 15add_shortcode('img', 'imgFunc');

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

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

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

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

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

guest

回答1

0

配列で取得すればよいのでは?

【get_post_meta:WordPress私的マニュアル】
http://elearn.jp/wpman/function/get_post_meta.html

返り値 パラメータ$singleがtrueの場合は、投稿データにパラメータ$keyの名前で登録されている1番目のカスタムフィールドの値を文字列として返す。パラメータ$singleがfalseの場合は、投稿データにパラメータ$keyの名前で登録されているすべてのカスタムフィールドの値を配列で返す

投稿2016/12/13 09:05

編集2016/12/13 09:06
kei344

総合スコア69400

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

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

raidomaru

2016/12/13 11:10

ありがとうございます。falseにして修正後のようにしたところ、画像は表示されるのですが、画像がなくても延々と繰り返されてしまいます。
kei344

2016/12/13 11:49

$imgに画像が入っているか確認すればよいのでは?
raidomaru

2016/12/13 12:35

判定を入れて修正後2にしました。 表示される写真の数は正常になったのですが、なぜか表示位置が固定ページにショートコードを書いた場所ではなく、header.phpのソース直後になってしまいます。 アドバイスいただけますと幸いです。
kei344

2016/12/13 13:13

なぜショートコードにこだわるかわかりませんが、使う場所で「imgFunc();」とすればよいと思います。「なぜ/どうして」に答えられるだけの情報が無いのでこれ以上はちょっとわかりません。
raidomaru

2016/12/13 14:10

ショートコードなくても固定ページで設定した画像をトップページのスライドと連動できればいいのですが、ショートコードでできるのではと思ったためです。 もっと簡単な方法などありますでしょうか?
kei344

2016/12/13 14:11

使う場所で「imgFunc();」
raidomaru

2016/12/13 14:17

固定ページだと使えないですよね?
kei344

2016/12/13 14:30

functions.php に書いた関数が固定ページで動かないというのは聞いたことがありませんが・・・。
kei344

2016/12/13 14:52

ああ、トップのテンプレートで書いているものだとばかり思っていました。現在書かれているコードは特定のページのみ読み出すものなので。 すみませんが、どういったコードをかかれているかがわからないので、お役に立てる気がしません。
raidomaru

2016/12/14 04:39

色々とありがとうございました。やり方も含めて考えてみます。
raidomaru

2016/12/14 05:40

returnにしたら1つしか出力されなくなってしまいました。returnを使うとそこで繰り返し処理が終わってしまうのでしょうか。
退会済みユーザー

退会済みユーザー

2016/12/14 05:45

はい、そうです。(http://www.phpbook.jp/tutorial/function/index4.html) なので、関数の途中では、$output .= '<li><img src="'.$img[0].'"></li>';として、 関数の最後で、return $output;としてください。(変数名はなんでもいいですが)
raidomaru

2016/12/14 06:33 編集

修正後3の通りにしたところ、画像が1つも表示されなくなってしまいました。
退会済みユーザー

退会済みユーザー

2016/12/14 06:39

return false;の分岐に入ってしまっていないか確認してみてください。 それから気になっていたのですが、`for($i=0;$i<$img_ids;$i++)`って`for($i=0;$i<count($img_ids);$i++)`としたほうがいいような……。
raidomaru

2016/12/14 07:04

ありがとうございます。ご指摘の通りcountを使用したらできました。 あとはindex.phpでショートコードを実行するとArrayになってしまうので、こちらを考えてみます。
退会済みユーザー

退会済みユーザー

2016/12/14 09:26

> ショートコードを実行するとArrayになってしまうので、こちらを考えてみます。 ショートコードの中で配列をreturnしてませんか?ショートコードの中でreturnしてよいのは、文字列だけです。
raidomaru

2016/12/14 14:46

してます。複数枚の写真を出力したいのですが、配列以外でできるのですか?
退会済みユーザー

退会済みユーザー

2016/12/16 09:10

> してます。 配列は Echo しても Array と表示されるだけです。これは WordPress 関係なく PHP の仕様です。add_shortcode フックのコールバック関数内で return に指定できるのは文字列だけです。なので、img タグをリターンするようにしてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問