wordpressカスタムフィールドのループ記述について
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 3,158
<?php
for ($i = 1; $i < 10; $i++){
$attachment_id.$i = get_field('bu_images'.$i.'');
$size.$i = "full"; // (thumbnail, medium, large, full or custom size)
$image.$i = wp_get_attachment_image_src( $attachment_id.$i[id], $size.$i );
$attachment.$i = get_post( get_field('image') );
$alt.$i = get_post_meta($attachment.$i->ID, '_wp_attachment_image_alt', true);
$image_title.$i = $attachment.$i->post_title;
}
?>
カスタムフィールドに以下のフィールドがあります(画像)。
bu_images1
bu_images2
bu_images3
bu_images4
bu_images5
bu_images6
bu_images7
bu_images8
bu_images9
bu_images10
これをループで取得して
画像があれば出力するようにしたいのです。
上記の書き方では取れないのですが、どうすれば情報が取れるでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
まず大きく分けて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()
で一回出力してみることもおすすめいたします。
そうすることで、
- どのデータが取得できていなくてエラーになるのか
どの段階までデータを取得できているのか?あるいは、それが欲しかったデータなのかが分かる - どういった取得の方法を使うべきか
欲していた結果通りだったか、そうでなければ、どのような方法を使うべきかを考える判断材料になる - 取得したデータからどのようにして出力できるか
返ってきた結果から、どのようなデータ形状になっているか分かるため、出力を適切に選べる
なども分かるようになっていくと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
…
<?php endwhile;endif; ?>
のループの中で記述をしないと出てこないとかではないでしょうか?
その場合は
for ($i = 1; $i < 10; $i++)
は必要ありません
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2016/05/05 16:18
どのように出力したいのか、出力部分のコードも質問に追記していただけませんか?