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

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

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

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

PHP

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

Q&A

解決済

1回答

2282閲覧

パンくずリストのカテゴリを表示したい

koro703

総合スコア29

WordPress

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

PHP

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

0グッド

1クリップ

投稿2017/07/05 07:50

wordpressでパンくずリストを表示したいのですが、
下記のHTMLでは投稿「ニュース&トピックス」のみ『トップ>1』など、
直接投稿記事にリンク表示されてしまい、間に「ニュース&トピックス」が
表示されません。

<表示されるもの>
●ブランドAやブランドB:カスタム投稿タイプ
●会社概要など:固定ページ

<カテゴリー部分が表示されないもの>
●ニュース&トピックス:投稿タイプ
カテゴリー:ニュース&トピックス
スラッグ:news-topics

ニュース&トピックスもきちんとした階層に表示されるためには、
どのようにしたら良いのでしょうか?

html

1<a href="<?php echo home_url(); ?>/">TOP</a> 2 3<?php //ブランド一覧ページの場合 4if($slugName == 'brand' || is_post_type_archive()): ?> 5> <a href="/brand/">ブランド</a> 6 7<?php //ブランドページの場合はブランド名を追加 8if(is_post_type_archive()): ?> 9> <strong><?php post_type_archive_title(); ?></strong> 10<?php endif; ?> 11 12 13<?php //ブランドAページの場合 14elseif( in_array( get_post_type(), array( 'brand_a'))): ?> 15> <a href="/brand/">ブランド</a> > <a href="/brand/brand_a/">ブランドA</a> > <strong><?php the_title(); ?></strong> 16 17<?php //ブランドBページの場合 18elseif( in_array( get_post_type(), array( 'brand_b'))): ?> 19> <a href="/brand/">ブランド</a> > <a href="/brand/brand_b/">ブランドB</a> > <strong><?php the_title(); ?></strong> 20 21<?php //ニュース&トピックスの場合 22elseif( in_array( get_category('news-topics'))): ?> 23> <a href="/news-topics/">ニュース&トピックス</a> > <strong><?php the_title(); ?></strong> 24 25<?php //上記以外の場合 26else: ?> 27 28<?php foreach ( array_reverse(get_post_ancestors($post->ID)) as $parid ) { ?> 29> <a href="<?php echo get_page_link( $parid );?>" title="<?php echo get_page($parid)->post_title; ?>"> 30<?php echo get_page($parid)->post_title; ?></a>&nbsp;>&nbsp; 31<?php } ?> 32> <?php the_title(); ?> 33 34<?php endif; ?> 35

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/07/05 09:51

カスタム投稿タイプ「ニュース&トピックス」にカスタム分類「カテゴリー」があり、「カテゴリー」のタームのひとつに「ニュース&トピックス」があるのでしょうか。
koro703

2017/07/06 00:36

書き方が正しいか不安ですが…。「ニュース&トピックス」は、wordpress既存の「投稿」から作成して、その際に「news-topics」というカテゴリをあてている感じです。カスタム投稿タイプは、また別で作成しています。ご質問頂いている内容に答えられているでしょうか?
guest

回答1

0

ベストアンサー

確認事項へのご返答ありがとうございました。
以下、回答です。


PHP

1elseif( in_array( get_category('news-topics'))): ?>

この判定文がおかしいように思います。
in_array関数に引数がひとつしか渡されていません。

PHP: in_array - Manual

get_category関数ではなく、get_the_category関数で現在の記事が所属するカテゴリーを取得し、その中に、'news-topics'があるかを判定するようにしてはいかがでしょうか。

テンプレートタグ/get the category - WordPress Codex 日本語版


追記

get_the_category関数の戻り値はオブジェクトなので、こうかもしれません。

PHP

1$categories = get_the_category(); 2foreach($categories as $category) : 3 if('news-topics' === $category->slug) : 4 var_dump($category); 5 endif; 6endforeach;

投稿2017/07/06 12:52

編集2017/07/08 02:09
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

koro703

2017/07/07 02:20

get_the_categoryを下記のようにしたみたのですが、特に表示は変わりませんでした。 基本的な記述が理解出来ておらず、申し訳ありません。ご確認頂いても宜しいでしょうか? <?php //ニュース&トピックスの場合 elseif( in_array( get_the_category(), array('news-topics'))): ?> > <a href="/news-topics/">ニュース&トピックス</a> > <strong><?php the_title(); ?></strong>
koro703

2017/07/10 04:20

追記頂きまして、ありがとうございます。 こちらで修正したみたのですが反応無いため、 下記で合っているかご確認頂いても宜しいでしょうか? <?php //ニュース&トピックスの場合 $categories = get_the_category(); foreach($categories as $category) : if('news-topics' === $category->slug) : var_dump($category); endif; endforeach; ?>
退会済みユーザー

退会済みユーザー

2017/07/10 13:29

ご提示のコードは問題ないと思います。 カテゴリーが「ニュース&トピックス」のときに、このコードを追加した場所を通過するかどうかは確認されましたか。
koro703

2017/07/21 04:58

お返事頂いていたのに、ご連絡が遅くなり申し訳ありません。 この通過したかどうかは、どうやれば調べることが出来ますでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/21 07:11

echo "teratail82954"; $categories = get_the_category(); (以下略) のように記載して、echoした文字が表示されればその処理を通過していて、表示されなければ通過していなことがわかります。 「反応無い」理由が、if文の条件に合致していないからか、それともそもそもコードを追加した場所が処理されていないからかを切り分けることが目的です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問