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

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

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

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

PHP

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

Q&A

解決済

1回答

1041閲覧

ワードプレスでループの入れ子の値を外で条件分岐させたい

pontas

総合スコア54

WordPress

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

PHP

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

0グッド

1クリップ

投稿2021/04/09 08:33

編集2021/04/13 13:31

前提・実現したいこと

ワードプレスでループの入れ子の値を外で条件分岐させたいです。
使用しておりますプラグインは「Advanced Custom Field」です。
以下のソースでは「link1」に値が渡っていた場合にページ内リンクを表示させたいです。

どなたかわかる方がおりましたら教えていただけないでしょうか

キャプチャ
イメージ説明

該当のソースコード

<?php if( have_rows('link1') ):?> <a href="">リンク1</a> <?php endif; ?> <?php while ( have_rows('block') ): the_row();?> <?php while ( have_rows('link1') ): the_row();?> <p><?php the_sub_field('title'); ?></p> <?php endwhile;?> <?php endwhile;?>

試したこと

最初の1個目の「block」のループでは
<?php if( have_rows('block') ):?><a href="#01">リンク1</a><?php endif; ?>
は上手くいくのですが入れ子のループになると値を取得出来ませんでした

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

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

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

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

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

nekora

2021/04/09 19:03

ACFのアドオン Repeater Field(有料機能)をお使いなのですね。 ここを見る限り https://hirashimatakumi.com/blog/30.html 記述は間違ってないように見受けられます。 となると、the_sub_fieldに与えてる、'txt'というフィールド名は正しいですか? そこを確認されたほうがよろしいかと思います。
pontas

2021/04/10 15:21

ご連絡ありがとうございます。 カスタムフィールドの名前は間違っていないのですが 色々と考えてみた所、 恐らくループの入れ子をループの外に出したのが原因で条件分岐できない状態だと思います。 ただスマートな記述が思い浮かばない為、悩んでいます。
nekora

2021/04/12 18:38

回答を考えているのですが、具体的なACFフィールドの構造が、ご提示いただいた情報だけでは把握できず。 答えるに答えられない状況です。 質問は編集・追記できますので、ACFの当該のフィールド群の画像を貼り付けていただけないでしょうか? それを見れば、こちらでも、同じ環境を作ってテストすることができ、回答をかけると思います。
pontas

2021/04/13 13:32

ご連絡遅れ申し訳ありません。 キャプチャを貼り付けましたのでご連絡させていただきます。
guest

回答1

0

ベストアンサー

まず、リピーターフィールドの設定がおかしいです。

なので以下の画像のように直しました。
リピーターフィールドのフィールドグループ設定
リピーターフィールドのフィールドグループ設定2

次にリピーターフィールドの入力用固定ページの入力例です。繰り返しフィールドの行を追加したいときは
一番下の行を追加をクリックする
ことで、ここでブロックに繰り返しのリピーターフィールドが追加されていきます。
なのでフィールドグループ自体の設定は先に掲載した画像のようになります。

以下で特定のページにのみPHPテンプレートを適用させます。
page.php

php

1<?php 2/** 3 * @package WordPress 4 */ 5get_header(); ?> 6<?php 7 if (url_to_postid( 'https://hoge.fuga.com/acf-test/' ) == $post->ID) { 8 include 'page/acf_repert.php'; 9 } 10?> 11<?php get_footer(); ?>

適用されるPHPテンプレート。ここでPHPでリンクを作成します。
page/acf_repert.php

php

1<!-- ===Contents-Head=== --> 2<div> 3 <h1><?php the_title_attribute(); ?> 4 <?php if( is_user_logged_in() ) : ?> 5 <br><small><?= "acf_repert.phpを読み込んでいます。" ?></small> 6 <?php endif; ?> 7 </h1> 8</div> 9<!-- ===Contents-Main=== --> 10<article> 11 <?php if( have_rows('block') ): ?> 12 <?php while ( have_rows('block') ): the_row();?> 13 <?php 14 $title = get_sub_field('title'); 15 $link = get_sub_field('link1'); ?> 16 <?php if ($link) : ?> 17 <a href="<?php echo $link; ?>"><?php echo $title; ?></a><br> 18 <?php endif;?> 19 <?php endwhile;?> 20 <?php endif; ?> 21</article>

以下が実行結果です。link1を設定してない物はリンクが出力されていないのが確認できます。

コードブロックの右上のアイコンをクリックするとコード全体をコピーできるので、ご自分の環境に張り付けて、動作確認してみてください。

投稿2021/04/13 22:58

nekora

総合スコア501

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

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

nekora

2021/04/13 23:00

回答が役になったなら回答の横の数字をポイントすると回答の評価の増減ができます。 また解決につながった回答はベストアンサーに指定できます。 この設定は個別に指定できます。
pontas

2021/04/13 23:08

ありがとうございます。 とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問