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

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

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

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

PHP

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

Q&A

解決済

2回答

11598閲覧

ACF PROのサブフィールドで条件分岐させたい

chocoron

総合スコア67

WordPress

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

PHP

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

0グッド

1クリップ

投稿2018/04/10 05:16

前提・実現したいこと

Advanced Custom Field PROの繰り返しフィールドで、
真/偽とテキストの2つのサブフィールドがあり、真/偽が含まれていたらテキストを表示させたい。

以下のような形です。


サブフィールド

1| □ラベル | テキスト
2| □ラベル | テキスト


試したこと

フィールドは以下の3つです。

繰り返しフィールド:    field
サブフィールド(真/偽):  sub_field01
サブフィールド(テキスト): sub_field02

単純にget_sub_fieldで分岐してみましたができませんでした。

<?php if(have_rows('field')) : if(get_sub_field('sub-field02')) : ?> <p>表示を分岐させたいテキスト</p> <?php endif; endif; ?>

実現したいことの前に、「field」に入力があった場合でも分岐させています。
その後どのようにしたら良いかわかりません。

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

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

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

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

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

guest

回答2

0

公式のドキュメントを確認しましょう。
https://www.advancedcustomfields.com/add-ons/repeater-field/

その書き方ではサブフィールドを取得できません。

php

1<?php 2 3if( have_rows('repeater_field_name') ): 4 5 while ( have_rows('repeater_field_name') ) : the_row(); 6 7 if(get_sub_field('sub_field01')) : 8 the_sub_field('sub-field02'); 9 endif; 10 11 endwhile; 12 13endif; 14 15?>

兎にも角にも基本の部分で迷ったら公式ドキュメントを
確認することをオススメします。

投稿2018/04/10 05:45

stampdoor

総合スコア483

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

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

chocoron

2018/04/11 05:03 編集

とりあえず、ループはさせないからとwhileを入れないで記述してみたらうまくいかなかった次第です。 表示させたいテキストは、サブフィールドの数に関係なく1回のみです。 私の「試したこと」のソースは無視していただいて、 何か方法はございますでしょうか?
stampdoor

2018/04/11 05:54

repeaterのフィールドの中身の回数にかかわらずwhileでループをしないと表示されません。 お約束事なのでループさせましょう。 フィールドの中身が1つであればループしても複数表示されてしまうということはありません。 フィールドは複数あるけれど1回のみループさせたい場合は#count=0; #count++;などでカウンターを設置して#count =1だったらend;とかでループを止めたらいかがでしょうか。 もしくは上記した通り、sub_field01の真偽で判断しているのなら表示させたいもの以外を偽にすれば良いと思います。
guest

0

自己解決

stampdoorさんの回答でカウンターを使う案をいただいたので、
それを参考にいたしました。

php

1 2<?php 3 if(have_rows('field')) : 4 $count = 0; 5 while(have_rows('field')) : the_row(); 6 if(get_sub_field('sub_field02')) : 7 if($count <= 1) : 8?> 9 <p表示させたいテキスト</p> 10<?php 11 break; 12 endif; 13 $count++; 14 endif; 15 endwhile; 16 endif; 17?>

投稿2018/04/23 04:43

chocoron

総合スコア67

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問