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

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

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

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

PHP

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

Q&A

解決済

1回答

903閲覧

wordpressのパンくずリストで特定の子カテゴリーのみ表示されない

southern_flavor

総合スコア70

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/04/29 08:35

編集2018/05/11 08:58

解決したい内容

例えば下記の2種類のパンくずがあったとします。
東京都 > 豊島区
東京都 > 新宿区

これがそれぞれ下記のように表示されます。
東京都
東京都 > 新宿区

要するに豊島区は親カテゴリーのみ表示され、新宿区はすべて表示されるという現象が起こりました。
これらを通常通り、文字列関係なく表示されるようにしたいです。
ご存知の方がいらっしゃれば教えていただきたいです。

試してみたこと

ダッシュボード画面の子カテゴリーの入力欄に
「 豊島区」と入力すると表示されます。(こういう風に入力しなくても表示したい)
しかし、下記ソースコードの.$cat->cat_name.に対して を入れても表示されませんでした。

ソースコード

プラグインなしでfunction.phpに下記のソースコードを入れています。

php

1function breadcrumb(){ 2 global $post; 3 $str = ''; 4 $str.= '<div id="breadcrumb">'; 5 $str.= '<ul class="breadcrumb" style="">'; 6 $str.= '<li><a href="'.home_url('/').'" class="home cat_ttl"><i class="fa fa-home fa-fw"></i><span>HOME</span></a><i class="fa fa-angle-right fa-fw"></i></li>'; 7 if(is_singular('post')){ 8 $categories = get_the_category($post->ID); 9 $cat = $categories[0]; 10 if($cat ->parent!= 0){ 11 $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category')); 12 foreach($ancestors as $ancestor){ 13 $str.= '<li><a href="'. get_category_link($ancestor).'" class="cat_ttl"><i class="fa fa-map-marker fa-fw"></i><span>'.get_cat_name($ancestor).'</span></a><i class="fa fa-angle-right fa-fw"></i></li>'; 14 } 15 } 16 $str.= '<li><a href="'. get_category_link($cat->term_id). '" class="cat_ttl"><i class="fa fa-map-marker fa-fw"></i><span>'.$cat->cat_name.'</span></a></li>'; 17 } 18 $str.= '</ul>'; 19 $str.= '</div>'; 20 echo $str; 21}

var_dump( $categories);

array(2) { [0]=> object(WP_Term)#12381 (16) { ["term_id"]=> int(23) ["name"]=> string(9) "東京都" ["slug"]=> string(7) "tokyoto" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(23) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(3) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(23) ["category_count"]=> int(3) ["category_description"]=> string(0) "" ["cat_name"]=> string(9) "東京都" ["category_nicename"]=> string(7) "tokyoto" ["category_parent"]=> int(0) } [1]=> object(WP_Term)#12383 (16) { ["term_id"]=> int(160) ["name"]=> string(9) "豊島区" ["slug"]=> string(10) "toshima-ku" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(160) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(23) ["count"]=> int(1) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(160) ["category_count"]=> int(1) ["category_description"]=> string(0) "" ["cat_name"]=> string(9) "豊島区" ["category_nicename"]=> string(10) "toshima-ku" ["category_parent"]=> int(23) } }

var_dump( $cat ->parent );

int(0)

var_dump( $ancestors);

array(0) { }

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずそれぞれのカテゴリー群を取得してforeachで回し、
それぞれ最後に<i class="fa fa-angle-right fa-fw"></i>
入っているはずなのに「新宿区」にはついていないことを考えると
単純にカテゴリー群を取得できていないのではと考えられます。
まずforeachで回す前に

php

1//それぞれvar_dumpして何が入っているか確認して下さい。 2$categories = get_the_category($post->ID); 3var_dump( $categories ); 4//もしくは 5$cat = $categories[0]; 6var_dump( $cat ->parent); 7//この値が0(つまり一番先祖のカテゴリー)だとその後のif文に引っかかりません。 8$ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category')); 9var_dump( $ancestors); 10//上のチェックが問題なければ祖先カテゴリーが一覧で見られるはず。

などしてちゃんと取得できているか確認して下さい。

投稿2018/05/06 04:55

stampdoor

総合スコア483

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

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

southern_flavor

2018/05/11 09:01

ご回答ありがとうございます。 var_dumpの結果を追記しました。 仰る通り、0になってしまいましたのでカテゴリー取得ができてない状態ですよね。。 このあと、$categories[0];を$categories[1];にしたり試したのですが、ちゃんと表示はされるものの、他の部分の表示がおかしくなってしまいました。 時間が経ってしまいましたが、他に解決策がありましたらお願いいたします。
stampdoor

2018/05/11 09:29

恐らくそれぞれの記事のカテゴリ選択の際に子カテゴリと合わせて親カテゴリも選択していると思うので、 $categories[0]としても親カテゴリが選択されてしまっています。 ですので簡単にやるとしたら子カテゴリが所属する記事に関しては親カテゴリの選択を解除するか、 下記のようにarrayの1番目が0(今回でいうと東京)だった場合は2番めを代入する、とするとよいかと思います。 $cat = $categories[0]; if($categories[0] == 0){ $cat = $categories[1]; }; というかそもそも設定しているカテゴリーから祖先カテゴリを取得しようとしているので もっと単純にして $categories = get_the_category($post->ID); $cat = $categories[0]; foreach($categories as $cat){ if($cat->term_id != 0){ $str.= '<li><a href="'. get_category_link($cat->term_id).'" class="cat_ttl"><i class="fa fa-map-marker fa-fw"></i><span>'.get_cat_name($cat->term_id).'</span></a><i class="fa fa-angle-right fa-fw"></i></li>'; } } みたいにして所属カテゴリーから東京以外をループさせる、といったほうが楽かもと思いました。 ご検討下さい。
southern_flavor

2018/05/11 13:33

ご回答ありがとうございます。 所属カテゴリーから東京以外をループさせるやり方で試しましたが、今度は正常に表示されている「新宿区」のほうが「新宿区>東京都」みたいな表示になってしまいましたので、 少々強引なやり方かもしれませんが、下記のコードにしたところ、正常になりました。 教えていただき、ありがとうございました! $categories = get_the_category($post->ID); $cat = $categories[0]; if($cat ->parent!= 0){ $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category')); foreach($ancestors as $ancestor){ $str.= '<li><i class="fa fa-angle-right fa-fw"></i></li>'; $str.= '<li><a href="'. get_category_link($ancestor).'" class="cat_ttl"><i class="fa fa-map-marker fa-fw"></i><span>'.get_cat_name($ancestor).'</span></a><i class="fa fa-angle-right fa-fw"></i></li>'; } $str.= '<li><a href="'. get_category_link($cat->term_id). '" class="cat_ttl"><i class="fa fa-map-marker fa-fw"></i><span>'.$cat->cat_name.'</span></a></li>'; } else if ($cat->term_id != 0) { foreach($categories as $cat){ $str.= '<li><i class="fa fa-angle-right fa-fw"></i></li>'; $str.= '<li><a href="'. get_category_link($cat->term_id).'" class="cat_ttl"><i class="fa fa-map-marker fa-fw"></i><span>'.get_cat_name($cat->term_id).'</span></a></li>'; } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問