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

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

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

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

PHP

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

Q&A

解決済

3回答

4242閲覧

親子孫カテゴリーを子孫でリスト表示したい

makoto-n

総合スコア436

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/07/16 15:13

編集2019/07/17 09:39

前提・実現したいこと

カテゴリーでわけている都道府県と区・市を県ごとに整頓させて表示させたいです。

イメージ図です。
イメージ
カテゴリー

店舗エリア-都道府県-市区カテゴリー
親-子-孫カテゴリー

店舗エリア
|-東京-中野
|   -中目黒
|   -上野
|   -神楽坂
|
|-千葉-松戸
|
|-神奈川-神奈川
|
|-福岡-福岡
|
親子孫になっています。
また、今後増えていきます。

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

都道府県ごとに分けたいのですが分けれていません。
県はカテゴリー的に子カテゴリーになります。

該当のソースコード

php

1<?php get_header(); 2/* 3Template Name: エリアマップ 4*/ ?> 5 6<?php 7 $cat = get_category_by_slug("shop-area"); 8 $catId = $cat->cat_ID; 9 //カテゴリ情報取得 10 var_dump($catId); 11 if (get_term_children($catId, 'category')) { //子カテゴリーがある場合 12 $catChird = get_term_children($catId, 'category'); 13 foreach ($catChird as $key => $value) { 14 echo "<li href=".get_category_link($value)." >".get_cat_name($value)."</li>"; 15 } 16 } 17 18?>

イメージ説明

yukikp様
結果のスクリーンショットです。
イメージ説明
参考までに
YukiYamashina様

php

1<h3>YukiYamashina</h3> 2<?php 3 $ids = wp_list_pluck( get_categories( [ 'child_of' => 115, 'hide_empty' => false ] ), 'term_id' ); 4 wp_list_categories( [ 'include' => implode( ',', $ids ), 'hide_empty' => false ] ); 5?>

結果
イメージ説明
ですが、県も表示されてしまうのでshop-areaの子要素・孫要素のすべてを記述していると思います。
もうすこし思考してみます


追加
カテゴリーを見せてほしいとのことでしたので
イメージ説明

画像
イメージ説明

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

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

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

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

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

guest

回答3

0

自己解決

出来ました!想定通りに表記するようになりました
sidebarに使っていた関数をもとにいじって作成したので、結局functions.phpに記述するようになりました。
スクショのせておきます。
処理が多いのが少し気になりますが

これをベースにグリッドを入れ込みたいと思います。
ありがとうございました!

イメージ説明

php

1<?php 2 //shop-areaが親 3 function test() { 4 $cat = get_category_by_slug('shop-area'); 5 $catChird = get_term_children($cat->cat_ID, 'category', array( 6 // 'child_of' => 4 7 ) ); 8 foreach($catChird as $key => $value) { 9 if (get_term_children($value, 'category')) { 10 echo "<p>ko." . get_cat_name($value) ."</p>"; 11 $magoID = get_term_children($value, 'category'); 12 foreach ($magoID as $key => $valueMago) { 13 echo "<p> mago." . get_cat_name($valueMago) ."</p>"; 14 } 15 } 16 } 17 } 18?> 19

投稿2019/07/19 06:47

makoto-n

総合スコア436

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

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

0

php

1$ids = wp_list_pluck( get_categories( [ 'child_of' => 115, 'hide_empty' => false ] ), 'term_id' ); 2wp_list_categories( [ 'include' => implode( ',', $ids ), 'hide_empty' => false, 'title_li' => '' ] );

投稿2019/07/17 01:07

編集2019/07/17 03:42
YukiYamashina

総合スコア1011

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

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

makoto-n

2019/07/17 01:25

返答ありがとうございます。 指摘されている書き方は <?php $cat = get_category_by_slug("shop-area"); $catId = $cat->cat_ID; //カテゴリ情報取得 var_dump($catId); $ids = wp_list_pluck( get_categories( [ 'child_of' => $cat_ID, 'hide_empty' => false ] ), 'term_id' ); wp_list_categories( [ 'include' => implode( ',', $ids ), 'hide_empty' => false ] ); ?> であっていますか? 全カテゴリが表示されます。 トリビア 販売 店舗エリア 千葉県 松戸 東京 中目黒
YukiYamashina

2019/07/17 01:28

$catId = $cat->cat_ID; としているのに、get_categories で指定しているのは 'child_of' => $cat_ID となっています。
makoto-n

2019/07/17 02:04

上書きしているということですか? 個人的にはslugからたどっていきたいのでget category by slugを使っています。
makoto-n

2019/07/17 02:08

YukiYamashina様のコードでは店舗エリア以下 'child_of' => 115 のカテゴリが全て取得できました。 が、すべて並列に取得しています。
YukiYamashina

2019/07/17 02:08

いえ、$cat_ID という名前の変数が定義されていません。 $catId = $cat->cat_ID; でカテゴリーIDを定義しているのであれば、 'child_of' => $catId ではないでしょうか?
makoto-n

2019/07/17 02:14

あ、上記理解しました。
makoto-n

2019/07/17 02:22

参考までに現在状況を追記しました。
YukiYamashina

2019/07/17 03:13

> 件も表示されてしまうのでshop-areaの子要素すべてを羅列いると思います。 どういった状況でしょうか?
makoto-n

2019/07/17 03:17

失礼しました。 件->県です。
YukiYamashina

2019/07/17 03:18

それは想像できたのですが、 > すべてを羅列いると思います が分かりませんでした。
makoto-n

2019/07/17 03:28

羅列というより表記と言ったほうがつたわりやすいでしょうか?
YukiYamashina

2019/07/17 03:41

いえ、「羅列いる」という動詞?は一般的には使われないため、打ち間違いか何かかと思いました。 > ですが、県も表示されてしまうのでshop-areaの子要素・孫要素のすべてを羅列していると思います。 例えば「東京」と「中野」が同じ階層で表示されるということでしょうか?
makoto-n

2019/07/17 03:47

失礼しました。 はい、同じ階層です。 東京のclassもcat-item cat-item-196、 駒越のclassはcat-item cat-item-129 となっており、わけられていると思えません。
YukiYamashina

2019/07/17 03:51

「駒越」の親カテゴリーが「東京」になっていないのではないでしょうか? その他の子カテゴリーについても同様です。
makoto-n

2019/07/17 04:01

なっています。 千葉の子に松戸が 神奈川の子に神奈川が
YukiYamashina

2019/07/17 04:05

お手数ですが管理画面でのカテゴリー一覧のスクリーンショットを添付していただけますか?
makoto-n

2019/07/17 06:50

追加しました。
YukiYamashina

2019/07/17 07:42

カテゴリーの親子関係が正しく設定されているのであれば、あと考えられるのは li > ul に padding-left: 0 が指定されているため、実際には階層をもたせて HTML が表示されているけど見た目上は同じ階層になっているように見える、という可能性です。 ブラウザの開発者ツールで wp_list_categories での出力部分に <ul class="children"> があるかどうか、あれば padding-left が 0 になっていないかを確かめてみてください。
makoto-n

2019/07/17 09:40

すみません、遅くなりました。 スクショ添付してます。
guest

0

wp_list_categories()関数ではだめでしょうか?

もしくは、

$parent = get_terms( array( 'taxonomy' => 'category', 'parent' => 0, 'hide_empty' => false, ) ); foreach( $parent as $p ){ ?> <div class="CityList"> <h2 class="CityList__head"><?php echo $p->name;?></h2> <?php $child = get_terms( array( 'taxonomy' => 'category', 'parent' => $p->term_id, 'hide_empty' => false, ) ); if( $child ){ ?> <ul class="CityList__body City"> <?php foreach( $child as $c ){ ?> <li class="City__item"><a href="<?php echo get_term_link( $c, 'category' );?>"><?php echo $c->name;?></a></li> <?php } ?> </ul> <?php } ?> </div> <?php } ?>

投稿2019/07/16 15:35

編集2019/07/17 01:44
yukikp

総合スコア797

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

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

makoto-n

2019/07/16 16:02

wp_list_categories()だとすべてのカテゴリが出力されてしまいます。 店舗エリア以外にも時期とかカテゴリがあります。 追記してくださってありがたいのですが、  サイトに技術的な問題が発生しています。 となってしまいます。
YukiYamashina

2019/07/16 17:04

> wp_list_categories()だとすべてのカテゴリが出力されてしまいます。 > 店舗エリア以外にも時期とかカテゴリがあります。 exclude_tree で除外するカテゴリーツリーを指定できます。
yukikp

2019/07/16 21:34

>店舗エリア以外にも時期とかカテゴリがあります。 ならば、1行目の'parent' => 0の代わりに、 //$cat = get_category_by_slug("shop-area"); parent' => $cat->cat_ID にしてみてください。
makoto-n

2019/07/17 00:17

返答が遅れてすみません。 <div class="clearfix">の直下に <?php $cat = get_category_by_slug("shop-area"); $parent = get_terms( array( 'taxonomy' => 'category', 'parent' => $cat->cat_ID, 'hide_empty' => false, ) ); foreach( $parent as $p ){ ?> <div class="CityList"> <h2 class="CityList__head"><?php echo $p->name;?></h2> <?php $child = get_terms( array( 'taxonomy' => 'category', 'parent' => $p->term_id, 'hide_empty' => false, ) ); if( $child ){ ?> <ul class="CityList__body City"> <?php foreach( $child as $c ){ ?> <li class="City__item"><a href="<?php echo get_term_link( $c, 'category' );?>"><?php echo $c->name;?></a></li> <?php } ?> </ul> <?php } ?> </div> を貼り付けていますが、用法が間違えていますか?  サイトに技術的な問題が発生しています。 と表記されます。
makoto-n

2019/07/17 00:19

> exclude_tree で除外するカテゴリーツリーを指定できます。 なにのカテゴリが追加されるか考えられませんので、 slug = shop-areaの子カテゴリを 子ー>孫として表示したいです。
yukikp

2019/07/17 01:44

最後の閉じかっこを忘れてました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問