WordPressの投稿一覧ページでカテゴリーのタイトルとスラッグの情報がうまく取得できなかったので、調べつつ解決したので備忘録。
今回出てくる関数はget_thecategory()
とget_queried_object()
#起きたこと
前提として、カスタム投稿タイプは使用していない、デフォルトの投稿タイプの話になる。
先述の通りで、参照しているテンプレートファイルはarchive.phpになる。
まずはパンクズリストの該当コードを抜粋。
<li><span><?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; } ?></span></li>
今回最初につまずいたのが、カテゴリーが複数ある中でいくつかは正常に表示がされていて、少数の表記が意図していないものになっているということ。
カテゴリーをよく見てみると、親子階層になっていて、調べたら上記のget_the_category()関数は親子関係のカテゴリー情報取得には向いていないということ、
厳密には子カテゴリーが正常に取得できていて、親カテゴリーが子カテゴリーの情報をランダムで取得するらしい。
#解決策
いくつかやり方はあるっぽいが、一番簡単そうな修正を見つけた。
デフォルトの投稿一覧ページしか検証していないので、他のテンプレートファイルで使えるかどうかわからないが、上記コードを
<li><span><?php echo get_queried_object()->name; ?></span></li>
これに変更して解決。
とてもシンプルな記述になった。
もともとのコードget_the_category()は'$cat[0]'で配列を取得して$cat
に代入しているが、
親子関係になると多次元配列となり、$cat[0]では階層関係までは取得できないとのこと、
get_queried_object()
関数は、単純に今閲覧しているカテゴリー情報を取得してきているだけらしい。
これにならって、タイトル部分も
<span class="en"><span class="eachTextAnime"><?php $cat = get_the_category(); $catslug = $cat[0]->slug; ?><?php echo $catslug; ?></span></span>
下記に変更
<span class="en"><span class="eachTextAnime"><?php echo get_queried_object()->slug; ?></span></span>
これだけで解決。
#参考文献
wordpressのget_the_categoryで親又は子カテゴリーのみ取得
[https://garop.net/wordpress-get-the-category/]
関数リファレンス/get queried object
[https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_queried_object]