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

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

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

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

PHP

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

Q&A

1回答

1001閲覧

Advanced Custom Fieldのチェックボックス条件分岐で表示非表示を出し分けたい

ponico

総合スコア10

WordPress

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

PHP

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

0グッド

1クリップ

投稿2019/03/19 06:45

WPで書籍論文一覧ページを作っています。
①全書籍・論文の一覧ページ(ページスラッグ list)
②特定ジャンルのみの書籍・論文一覧ページ(ページスラッグ list-genre)
の2種類のページがあります。

ページは固定ページで、カスタム投稿を出力しています。
カスタム投稿を出力するページテンプレートを作り、それぞれの書籍一覧ページにそのページテンプレートを適用しています。
ページテンプレート内で①と②のページの表示を切り分ける条件分岐を書いています。

カスタム投稿は「発行年」を1投稿として、
ACFで書籍タイトル、論文タイトルそれぞれを入れる2つの繰り返しフィールドを作っており
その中に②のページに表示するかどうかのチェックボックスがあり、
チェックが入ったタイトルだけが②のページに出力されるようにしたい、というのが前提です。

出力時の見た目は下記のような感じになります

【2001年】

■書籍一覧

 ・タイトルタイトル
・タイトルタイトル
・タイトルタイトル

■論文一覧

 ・タイトルタイトル
・タイトルタイトル
・タイトルタイトル

発生している問題・エラーメッセージ

下記のコードでは、②のページで、チェックボックスにチェックした書籍・論文タイトルだけが表示されるところまではうまくいきました。
しかしこれでは、チェックボックスにチェックが入ったものがない年の投稿の出力箇所で、
h2とh3が残ってしまいましたので、②に表示するものがない年のh2とh3も消えるようにしたいです。

php

1<?php 2 $args = array( 3 'post_type' => 'books', 4 'posts_per_page' => -1, 5 'orderby' => 'title', 6 'order' => 'DESC', 7 ); 8 $domestic_post = get_posts($args); 9 $wp_query = new WP_Query($args); 10 if ( $wp_query->have_posts() ) : 11 while ($wp_query->have_posts()) : $wp_query->the_post(); 12?> 13<h2><?php the_title(); ?></h2> //投稿のタイトル=○○年 14 15<?php if( have_rows('book_content') ): ?> 16<h3>書籍一覧</h3> 17 18<?php while ( have_rows('book_content') ) : the_row(); ?> 19<?php if( is_page('list-genre') ): //②のページの場合のみ 20 $checked = get_sub_field('check_or_not'); //②に表示するかどうかのチェックボックスフィールド 21?> 22 <?php if($checked){ ?> 23 〜出力コード〜 24 <?php } ?> 25 26<?php else: ?> //①のページの場合 27 〜出力コード〜 28<?php endif; ?> //書籍ここまで 29 30<?php if( have_rows('repo_content') ): ?> 31<h3>論文一覧</h3> 32 33<?php while ( have_rows('repo_content') ) : the_row(); ?> 34<?php if( is_page('list-genre') ): //②のページの場合のみ 35 $checked = get_sub_field('check_or_not'); //②に表示するかどうかのチェックボックスフィールド 36?> 37 <?php if($checked){ ?> 38 〜出力コード〜 39 <?php } ?> 40 41<?php else: //①のページの場合 ?> 42 〜出力コード〜 43<?php endif; ?> //論文ここまで 44 45<?php endwhile; endif; wp_reset_postdata(); ?>

試したこと

たとえばh2の部分を下記のようにしてみましたが、うまくいきませんでした。

php

1<?php if( is_page('list-genre') ): 2 $checked = get_sub_field('cyber_or_not'); 3 if($checked){ 4?> 5<h2><?php the_title(); ?></h2> //投稿のタイトル=○○年 6<?php } ?> 7<?php endif; ?>

このように、繰り返しフィールドのwhile文の外でチェックボックスフィールドでの条件分岐が可能なのか…
不可能なら他にどんな方法があるのか…と詰んでしまっています。

具体的な目標

「②のページのみ、
書籍タイトル繰り返しフィールドor論文タイトル繰り返しフィールドで
ひとつでもチェックボックスにチェックされていたら表示、ひとつもチェックされてなかったらh2,h3まで丸々非表示」

を実現したいです。

補足情報

上記説明でわかりにくかったら補足いたしますので何卒ご助力いただきたく思います。

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

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

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

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

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

guest

回答1

0

「〜出力コード〜」を出力せず、変数に入れておいて、その変数内に内容が入っている場合にのみh2とh3を出力するようなコードにすればよいのでは。

投稿2019/03/20 15:10

kei344

総合スコア69400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問