0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

wordpressでのアーカイブページ(投稿一覧ページ)でカテゴリーの取得がうまくいってない時の対処法

Last updated at Posted at 2021-12-09

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]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?