$c = get_the_category();
$pid = $c[0]->parent;
if( $pid > 0 ) {
do {
$t = get_term_by( '', $pid, 'category' );
$pid = $t->parent;
} while( $pid > 0 );
echo '<a href="' . get_category_link( $t->term_id ) . '">' . $t->name . '</a>';
}else{
echo '<a href="' . get_category_link( $c[0]->term_id ) . '">' . $c[0]->name . '</a>';
}
こんな感じかな?
V.J.Catkick
早速のお返事ありがとうございます!!
ご教授いただいた記述で思い描いていた内容になるのですが
別の親カテゴリーに移動した際にも
最初の親カテゴリー名が表示してしまいます。。
なぜでしょうか。。
■親カテゴリー1
子カテゴリー1-A
子カテゴリー1-B
子カテゴリー1-C
■親カテゴリー2
子カテゴリー2-A
子カテゴリー2-B
子カテゴリー2-C
■親カテゴリー3
子カテゴリー3-A
子カテゴリー3-B
子カテゴリー3-C
というカテゴリー構成なのですが
親カテゴリー1のページを見ているときは
ご教授いただいた内容で問題なく表示するのですが
親カテゴリー2に移動した際にも
希望表示箇所に「親カテゴリー1」と表示してしまいます。。
申し訳ありませんが、ご教授くださいますでしょうか。
よろしくお願いいたします!
あれ、試してみたんですが、一応問題ないような…。親カテゴリー2にも記事(親カテゴリー2そのもの、もしくは子カテゴリー2-Bとかに所属する記事)がある、という理解でいいんですよね。
カテゴリーページということでしたので、カテゴリーページで試してみたんですが、個別エントリのページ等ともに、一応問題なさそうなんです。
■親カテゴリー1
子カテゴリー1-A
子カテゴリー1-B(1-Aのさらに下)
■親カテゴリー2
子カテゴリー2-A
子カテゴリー2-B(2-Aのさらに下)
こういう環境を作って、
・子カテゴリー1-B
・親カテゴリー2
・子カテゴリー2-B
の3カ所に記事を置いて、個別の記事それぞれと、親カテゴリー1、親カテゴリー2のカテゴリページで動作を確認しました。
コードを置いたのはループの外側(下部)で、プラグイン等はインストールなしの状態でのチェックです。そちらの環境と比較してみていただけますか?
V.J.Catkickさま
申し訳ありません!!
私が間違っておりました。。。
きちんと表示されております。
重ねて謝らないといけないのですが
ご説明するべきことが抜けておりました。。。
こちらで表示がおかしかったのは、これが原因でした。。
先ほどの親カテゴリー名を表示した箇所の下に
その親カテゴリーに属する子カテゴリーをリスト表示させたいのです。。
要は、親カテゴリー1に属するページのすべてには
■親カテゴリー1
・子カテゴリー1-A
・子カテゴリー1-B
・子カテゴリー1-C
というようにしたいのです。
そこから子カテゴリー1-Bのページに移っても
同じ固定箇所に
■親カテゴリー1
・子カテゴリー1-A
・子カテゴリー1-B
・子カテゴリー1-C
という風に表示させたいのです。。。
これは可能でしょうか。
説明不足故、お手数をおかけしておりますが
ご教授いただければ幸いでございます。
よろしくお願いいたします!
なるほど。
えぇっと、上のコードで親カテゴリのterm_idは取れている($t->term_idとか)ので後は普通にget_categories()にterm_idを指定すれば、その子孫は取れます。それを整形すれば問題ないかな、と思います。
http://wpdocs.sourceforge.jp/関数リファレンス/get_categories
ここにサンプルがあります。
2階層目まで(直接の子供まで)ならparent、子孫まで取るならchild_ofにterm_idをセットしてコールすれば、結果として戻ってきます。後は用例のサンプルを見ながら、表示にあわせればよろしいかと思います。
V.J.Catkickさま
こんばんは。
ご回答ありがとうございます。
。。。すみません。。
私が知らなさすぎるのですが、何度トライしても反映できませんでした。。
しかも、元々お教えいただいた内容すら表示できなくなってしまい
完全に迷路状態です。。
記述内容をお教えくださいませんでしょうか。。。
よろしくお願いします。
$c = get_the_category();
$pid = $c[0]->parent;
if( $pid > 0 ) {
do {
$t = get_term_by( '', $pid, 'category' );
$pid = $t->parent;
} while( $pid > 0 );
// 親を出力:子ページで参照した場合
echo '<a href="' . get_category_link( $t->term_id ) . '">' . $t->name . '</a>';
$pid = $t->term_id;
}else{
// 親を出力:自分自身が親の場合
echo '<a href="' . get_category_link( $c[0]->term_id ) . '">' . $c[0]->name . '</a>';
$pid = $c[0]->term_id;
}
echo '<ul>';
$categories = get_categories('child_of='. $pid);
foreach($categories as $category) {
// 子を出力
echo '<li><a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
}
echo '</ul>';
こんな感じですね。出力位置(ulやli)は適宜調整して下さい。
V.J.Catkickさま
こんにちは。
さすがです。
思っていた通りの表現が出来るようになりました!!!
本当にありがとうございます!!
次のステップとして、お教えいただいた内容の
記述してある意味を理解するようにしたいと思います。。。
難しい。。。
このたびは本当にありがとうございました!!!