記事ループ内で親カテゴリー名を表示したい、ということでしょうか?
現状のコードを例示いただけるとわかりやすいです。
ご返信ありがとうございます。
<div class=”box”>
<?php
$cat = get_the_category();
$parent_id = $cat[0]->category_parent;
if (is_category(親カテゴリーID)||$parent_id == 親カテゴリーID) { ?>
<?php wp_list_cats(‘child_of=親カテゴリーID’); ?>
以下ループ
<?php } ?>
</div>
やりたいのは、
「親カテゴリ」のページを開けば属している子カテゴリーの一覧を表示。
「子カテゴリ」なら親のカテゴリを呼び出し、そこに入っている子カテゴリ一覧を表示。
です。
上記では親カテゴリーページの場合はそのIDに属する子カテゴリーを、子カテゴリーページではそのカテゴリーの属する親カテゴリーに属している子カテゴリー一覧を表示。という処理なのですが、一部子カテゴリーで正常に表示されない不具合がありました。
予想ですが、おそらく一覧で一番最初に表示された記事が複数の親カテゴリーを登録しているからではないかと思います。(ここらへんはカテゴリー検索なのにどうして別の親カテゴリーの子カテゴリ一覧が出たり、もしくは何も出なかったりと不安定な感じでした)
次に現在表示されているURLを基準に分岐させようと思ったのですが、こちらも最初に申した通り出力されるURLが暗号化されていて正常な分岐処理がされませんでした。
予想ですが、おそらく一覧で一番最初に表示された記事が複数の親カテゴリーを登録しているからではないかと思います。
その通りだと思います。
未検証ですが、
<?php
// $cat = get_the_category();
// $parent_id = $cat[0]->category_parent;
// if (is_category(親カテゴリーID)||$parent_id == 親カテゴリーID) { ?>
$queried = get_queried_object();
if ( ! $catid = $queried->parent ) {
$catid = $queried->term_id;
}
<?php wp_list_cats('child_of=' . $catid); ?>
ではどうでしょう?(孫カテゴリーとか子カテゴリーがない場合は考慮していません。)
関数リファレンス/get queried object – WordPress Codex 日本語版
コードありがとうございます。
まだすべてをチェックしたわけではありませんが、見た限りの子カテゴリーではすべてURLのパスと同じ親カテゴリーの子カテゴリー情報が出力されていました!
$queried = get_queried_object();
if ( ! $catid = $queried->parent ) {
$catid = $queried->term_id;
}
<?php wp_list_cats('child_of=' . $catid); ?>
の仕様なのですが、
get_queried_object()でページリクエスト情報を取得
if ( ! $catid = $queried->parent ) {
で親カテゴリーの名を取得(この時点で$catidの値は空)。
<?php wp_list_cats('child_of=' . $catid); ?>
取得したidを張り付け。
という処理で合っていますでしょうか?
もう一点、追加で申し訳ありませんが、子カテゴリの取得と同時に見出しとして親カテゴリ名を取りたいと思っています。
元は
$cats = get_the_category();
$cat = $cats[0];
if($cat->parent){
$parent = get_category($cat->parent);
echo '<dt>■'.$parent->cat_name.'</dt>';
}else{
echo '<dt>■'.$cat->cat_name.'</dt>';
}
で取得していたのですが、子カテゴリ一覧同様、これでは複数の親カテゴリにまたがっている記事がある場合、意図したカテゴリが出力されない場合がありました。
そこで先のget_queried_object();を参考に別のサイトで見かけた
<?php
$cat = get_queried_object();
$cat_name = $cat->name;//カテゴリー名
$cat_id = $cat->cat_ID;//カテゴリーID
$cat_slug = $cat->slug;//カテゴリースラッグ
$cat_term = $cat->term_id;//タームID
$cat_termid = $cat->term_taxonomy_id;//タクソノミーID
$cat_taxonomy = $cat->taxonomy;//タクソノミー名
$cat_count = $cat->count;//投稿数
$cat_description = $cat->category_description;//カテゴリー説明文
$parent_id = $cat->category_parent;//親カテゴリーID
$parent = get_category($cat->category_parent);
$parent_catname = $parent->cat_name;//親カテゴリー名
?>
という処理でカテゴリ情報を抜き出そうと思ったのですが、反映するとHP内には何も表示されませんでした(echoで変数を出力した場合も同様)
親カテゴリ名を取りたいのですが、どうすれば良いでしょうか?
重ね重ねすみませんが、よろしくお願いします。
すみません。上記内容ですが一応自己解決しました
使用したコードは下記です。
$queried = get_queried_object();
if ( $queried->parent == 親カテゴリーID || $queried->term_id == 親カテゴリーID) {
echo $cat_name = get_the_category_by_ID( 親カテゴリーID );
} else if( $queried->parent == 親カテゴリーID || $queried->term_id == 親カテゴリーID) {
echo $cat_name = get_the_category_by_ID( 親カテゴリーID );
}
完全自動ではありませんが、一応これで表示されました。
if ( ! $catid = $queried->parent ) {
$catid = $queried->term_id;
}
上記は少しはしょって(?)書きました。理解しやすくすると、
$parentid = $queried->parent; // 子カテゴリーでない場合、0 になる
if ( $parentid ) {
/**
* 親カテゴリーがある場合
*/
$catid = $parentid;
} else {
/**
* 親カテゴリーがない($queried に格納されているのが親カテゴリーの)場合
*/
$catid = $queried->term_id;
}
という感じになります。
よって、この時点で $catid
には表示させたいカテゴリーのIDが格納されているはずです。
$cat = get_category( $catid );
echo $cat->name;
で表示されると思うのですがいかがでしょう?(未検証です)
—
ちなみに
echo $cat->name;
の部分ですが、カテゴリー名の表示時に標準では 'single_cat_title'
というフィルターがかかっています。
関数リファレンス/single term title – WordPress Codex 日本語版#参考
なので、
echo apply_filters( 'single_cat_title', $cat->name );
とした方がベターです。
—
あ、解決してましたか
参考までに ^^;
補足ありがとうございます!
これで解決済みとさせたいただきます!