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

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

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

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

PHP

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

Q&A

1回答

637閲覧

カスタム投稿で全てのタームに属する記事を一覧ページに表示したい

mamamamamama

総合スコア25

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/11/29 12:53

Wordpressで「店舗を探す」ページを作成しています。
カスタム投稿の記事編集ページでエリアを選択し、子エリアごとの一覧ページで投稿を表示させるようにしました(※1 下記コード参照)。

編集ページでのタームは以下のようになっています。

エリアA
|_子エリア1
|_子エリア2
|_子エリア3

エリアB
|_子エリア4
|_子エリア5
|_子エリア6

ここに以下の仕様を追加したいと思っています。

1、全エリアに該当する記事がある場合、子エリア全ての一覧ページに記事を表示させる(子エリアが6種類なら、6ページに記事1がそれぞれ表示される)

エリアA
|_子エリア1
|_子エリア2
|_子エリア3

エリアB
|_子エリア4
|_子エリア5
|_子エリア6

全てのエリア ←2、このチェックボックスを追加して、ワンクリックで全エリアに該当することにしたい

3、記事一覧ページにて各記事ごとにエリア名を表示させていますが、ここの表示を「全エリア」もしくは現在表示されているエリア名で表示させたい

以上です。
なんだかうまく説明ができず、、伝わらないようでしたらご指摘ください!

※1のコードです。

<?php $target_post = 'カスタム投稿名'; $target_post_cat = 'タクソノミー名'; $post_count = -1; $cat_args = array( 'parent' => 0, //トップレベルのタームのみ 'hierarchical' => 0, //子タームを含めない 'hide_empty' => 0 ,//全部出す 'pad_counts' => 1 ); $cats = get_terms($target_post_cat, $cat_args); foreach ($cats as $cat): ?> <?php $target_cat_name = esc_html($cat->name);//親カテゴリ名 $target_cat_slug = esc_html($cat->slug);//親カテゴリスラッグ ?> <li class="dropdown cf"> <p id="<?php echo $target_cat_slug; //親カテゴリスラッグ?>"><i class="fas fa-angle-double-down"></i><?php echo $target_cat_name;//親カテゴリ名 ?></p> <?php $child_cats = get_terms($target_post_cat, 'hierarchical=0&hide_empty=0&parent=' . $cat->term_id ); ?> <?php if ($child_cats) : ?> <ul class="child-ul"> <?php foreach ($child_cats as $child_cat): ?> <?php $child_cat_name = esc_html($child_cat->name);//子カテゴリ名 $target_cat_slug = esc_html($child_cat->slug);//子カテゴリスラッグ ?> <li><a href="<?php echo get_term_link( $child_cat ); ?>"><?php echo $child_cat_name; //子カテゴリ名?></a><?php echo $child_cat_name; //子カテゴリ名?></a></li> <?php $args = array( 'post_type' => array($target_post), 'taxonomy' => $target_post_cat, 'term' => $target_cat_slug, 'post_status' => 'publish', 'posts_per_page' => $post_count, // 表示するページ数 'orderby' => 'menu_order', //'order' => 'DESC' // 並び順 ); $my_query = new WP_Query($args); ?> <?php wp_reset_postdata(); ?> <?php endforeach; ?> </ul></li> <?php endif; ?> <?php endforeach; ?>

どうぞよろしくお願いいたします!

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

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

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

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

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

guest

回答1

0

カスタム分類の構造を以下のようにしてください。
つまり、エリアAとエリアBの親を「全てのエリア」にするということです。

全てのエリア |_エリアA | |_子エリア1 | |_子エリア2 | |_子エリア3 | |_エリアB |_子エリア4 |_子エリア5 |_子エリア6

このような構造にすることで、「全てのエリア」のアーカイブページに全てのエリアに属する投稿が表示されます。

投稿2018/12/10 08:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mamamamamama

2018/12/14 04:49

検証が遅くなりお返事が遅れまして申し訳ありません。 「すべてのエリア」を追加しましたが、表示自体は今までと変わりませんでした。 子エリア一覧ページが6種類ありますので、6エリア全てがカテゴリとして選択された場合、その記事を子エリア1から6にそれぞれ6回表示させるということはできないのでしょうか。というかSEO的に重複ページと捉えられるなどの理由でしないほうが良いのでしょうか。 うまく伝えられずすみません。。。
退会済みユーザー

退会済みユーザー

2018/12/14 12:01

質問文に記載されているコードはどこのPHPファイルに書かれているものですか? これがarchive.phpやarchive-{カスタム投稿タイプ}.phpなどに書かれているものであれば、そのコードを削除し、メインクエリを表示するループ(元々archive.phpに書かれていたコード)に変更してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問