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

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

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

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

PHP

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

Q&A

解決済

2回答

4335閲覧

wordpressカスタムフィールドのループ記述について

ssk

総合スコア332

WordPress

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

PHP

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

0グッド

1クリップ

投稿2016/05/04 06:51

PHP

1<?php 2 for ($i = 1; $i < 10; $i++){ 3 $attachment_id.$i = get_field('bu_images'.$i.''); 4 $size.$i = "full"; // (thumbnail, medium, large, full or custom size) 5 $image.$i = wp_get_attachment_image_src( $attachment_id.$i[id], $size.$i ); 6 $attachment.$i = get_post( get_field('image') ); 7 $alt.$i = get_post_meta($attachment.$i->ID, '_wp_attachment_image_alt', true); 8 $image_title.$i = $attachment.$i->post_title; 9 } 10 ?>

カスタムフィールドに以下のフィールドがあります(画像)。
bu_images1
bu_images2
bu_images3
bu_images4
bu_images5
bu_images6
bu_images7
bu_images8
bu_images9
bu_images10

これをループで取得して
画像があれば出力するようにしたいのです。

上記の書き方では取れないのですが、どうすれば情報が取れるでしょうか?

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

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

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

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

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

kei344

2016/05/05 07:18

どのように出力したいのか、出力部分のコードも質問に追記していただけませんか?
guest

回答2

0

ベストアンサー

まず大きく分けて3つ修正すべきところがあります。

  1. ループ文の使い方
  2. カスタムフィールドの取得方法
  3. テンプレートタグの使い方

以下に詳細をまとめます。

#####1.ループ文の使い方
この記述だと正しくループが回らないのではありませんか?

for ($i = 1; $i < 10; $i++){ $attachment_id.$i = get_field('bu_images'.$i.''); /*この時点で 「変数$i」 に 「get_field()の戻り値が代入」されてしまい変数$iの値が狂います。 あと、get_field()の引数の末尾にある「.''」は何でしょう?多分不要な記述かと*/

ループ(for)文内部の変数にいちいち連番を振る必要はありません。

$attachment_id.$i は $attachment_id
$size.$i は $size
$image.$i は $image
//以下省略

で問題なく動きます。
#####2.カスタムフィールドの取得方法
カスタムフィールドはどのようにして作成されていますか?

  • 「Advanced Custom Fields Pluginの取得用関数」
  • 「通常のカスタムフィールドの取得用関数」

が混在していますが、それぞれの取得方法は違っています。どのようにして作成されていますか?
(混在させるのは正しい用法とは言えません)

get_field()…「Advanced Custom Fields Plugin」専用の関数です。
「Advanced Custom Fields」プラグインを使用してカスタムフィールドを作成されていますか?
使用していないなら、無効な関数です。
逆に、使用されているのであれば、こちらを使用するだけですべて事足ります。
※画像フィールドならば、「画像オブジェクト」にしておけば、そこにフィールドの画像に関するデータはすべて入っています。(取得はその一回で済み、以後の回りくどい処理をすべて省いて出力できます)
ACF Imgae
https://www.advancedcustomfields.com/resources/image/

#####3.テンプレートタグの使い方
使用する前に、ご存知ないテンプレートタグなのであれば、
Codexで「テンプレートタグ」の意味と使い方を調べてから使用することをおすすめします。

例えば、get_post()の引数にget_field('image')を渡していますが、使い方を間違っているかと。
(それともimageという別のフィールドを作成されていて、そこに何らかの別の値を収めている?)

get_post()を使うなら渡すべき引数は「投稿ID」です。画像のIDを渡してしまうと、全然別の記事の情報を取得します。
関数リファレンス/get post
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_post

※Advanced Custom Fieldsを使用しているのであれば
$attachment_id = get_field('bu_images'.$i)で取得した後の処理全部を先述の「ACF Imgae」のリンク先にある書き方へ変更すれば取得〜出力まで行えます。

また、テンプレートタグで取得したデータに何が入っているかを
逐一var_dump()で一回出力してみることもおすすめいたします。
そうすることで、

  • どのデータが取得できていなくてエラーになるのか

どの段階までデータを取得できているのか?あるいは、それが欲しかったデータなのかが分かる

  • どういった取得の方法を使うべきか

欲していた結果通りだったか、そうでなければ、どのような方法を使うべきかを考える判断材料になる

  • 取得したデータからどのようにして出力できるか

返ってきた結果から、どのようなデータ形状になっているか分かるため、出力を適切に選べる

なども分かるようになっていくと思います。

投稿2016/05/05 19:17

編集2016/05/05 19:22
manabufukai

総合スコア700

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

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

ssk

2016/05/20 06:44

返信が遅くなってしまい、申し訳ございませんでした。 内容を参考に実装することができました。回答ありがとうござます、助かりました。
manabufukai

2016/05/20 11:24

無事実装できたようで何よりです! カスタムフィールドをデフォルトかプラグインかどちらで実装しているのか定かではなかったので、ちょっとふわっとした回答になってしまいましたが、お役に立てたのであれば幸いです。
guest

0

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?php endwhile;endif; ?>

のループの中で記述をしないと出てこないとかではないでしょうか?
その場合は
for ($i = 1; $i < 10; $i++)
は必要ありません

投稿2016/05/05 09:50

921138

総合スコア59

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

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

ssk

2016/05/20 06:45

ご指摘ありがとうございました><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問