【WordPress】ループ内でカテゴリーの取得と表示
属するカテゴリをclass名としてつける
html
<article class="… … … カテゴリスラッグ1 カテゴリスラッグ2 … カテゴリスラッグn … … ">
上記のように投稿が属するカテゴリをすべてclassとしてつけたいとき
関数でつける
「<?php post_class(); ?>」を使えば、カテゴリー名に加えてタグや公開状態、postIDまでclassとして出力してくれるので便利。
PHP
<article <?php post_class(); ?>>
出力は「category-〇〇」というようにカテゴリースラッグの前に「category-」がつきます。
手動でつける
上記で「category-」をつけたくないとき、不要なclass名は付けたくないときは、下記。
その記事が所属するカテゴリーを全て取得してクラスとして付けます。
PHP
<article class="<?php $category = get_the_category();
if ($category) {
foreach ($category as $cat) {
if ($cat === end($category)) {
echo $cat->category_nicename;
} else {
echo $cat->category_nicename;
echo ' ';
}
}
} ?>">
出力は「cate1 cate2 cate3」のようにスラッグのみになります。
属するカテゴリの親カテゴリを表示
第1階層のカテゴリを表示
たとえば下のようなカテゴリがあって、
映画
ー洋画
ーーアメリカ映画
ーーフランス映画
ー邦画
漫画
ー少女漫画
ー少年漫画
どのカテゴリを選んでも取得するのは「映画」や「漫画」の第1階層のカテゴリにしたい場合
カテゴリー1つのみ
取得した属するカテゴリ情報の、ひとつ目のカテゴリーについて第1階層を求めます。
PHP
<?php
//現カテゴリ取得
$cat = get_the_category();
$cat = $cat[0];
$cat_parent = $cat->parent;
$cat_id = $cat->cat_ID;
if ($cat_parent == 0) {
$slug = $cat->slug;
} else {
$ancestor = array_pop(get_ancestors($cat_id, 'category'));
$slug = get_category($ancestor)->slug;
}
?>
| array_pop | (PHP)配列の最後の要素を取り除く(配列は1つ要素がなくなる) |
| get_ancestors | (WordPress)指定されたオブジェクトの祖先オブジェクトの配列を取得 |
カテゴリーすべて
取得した属するカテゴリ情報のすべてのカテゴリーに対して第1階層を求めます。
…ので、同じ第1階層を持つカテゴリを複数選択しているとダブる…そのときは調整が必要。
PHP
<?php
$category = get_the_category(); //属するカテゴリを取得
if ($category) { //カテゴリが設定してある場合
foreach ($category as $cat) { //それぞれのカテゴリーに対して
$cat_parent = $cat->parent;
$cat_id = $cat->cat_ID;
if ($cat_parent == 0) { //第1階層のとき
$slug = $cat->slug; //自身のスラッグ取得
} else {
$ancestor = array_pop(get_ancestors($cat_id, 'category')); //第1階層のカテゴリIDを取得
$slug = get_category($ancestor)->slug; //第1階層のスラッグを取得
}
}
}
?>
第1階層の場合はそのまま、下層の場合は属する第1階層のカテゴリを取得しています。
get_the_category( $id ) で取得できるデータ
| term_id | (整数) カテゴリー ID |
| name | (文字列) カテゴリー名 |
| slug | (文字列) カテゴリーのスラッグ |
| term_group | (整数) カテゴリーのグループ |
| term_taxonomy_id | (整数) カテゴリーのタクソノミー ID |
| taxonomy | (文字列) タクソノミー名 'category' |
| description | (文字列) カテゴリーの説明 |
| parent | (整数) 親カテゴリーの ID |
| count | (整数) カテゴリーに登録されている投稿の数 |
| object_id | (整数) オブジェクト ID |
ひとつ上のカテゴリを表示
下のようにカテゴリが2階層しかないときは
映画
ー洋画
ー邦画
漫画
ー少女漫画
ー少年漫画
こっちのほうが簡単そう
PHP
<?php
$category = get_the_category(); //属するカテゴリを取得
if ($category) { //カテゴリが設定してある場合
foreach ($category as $cat) { //それぞれのカテゴリーに対して
if ($cat->category_parent) { //親カテゴリがある場合(親カテゴリのIDがあるかどうか)
$parent_cat = get_category($cat->category_parent);
$name = $parent_cat->name; //親のカテゴリ名取得
$slug = $parent_cat->slug; //親のスラッグ取得
} else { //親カテゴリがない場合=自身が親の場合
$name = $cat->name; //自身のカテゴリ名取得
$slug = $cat->slug; //自身のスラッグ取得
}
}
}
?>
参考
- https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E...
- https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E...
- 【WordPress】どの階層にいても最上位(一番上)のカテゴリー名を表示する方法 | KERENOR { ケレンオール }
https://www.kerenor.jp/get-top-level-category/ - PHP: array_pop - Manual
https://www.php.net/manual/ja/function.array-pop.php - PHP: array_pop - Manual
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E...
関連記事
-
WordPress 関数の使い方
【WordPress】ページネーションを作る
-
WordPress プラグイン
【WordPress】フロントでIntuitive Custom Post Orderの並び替えが効かないとき
-
WordPress 関数の使い方
【WP】wp_get_archivesがリンク先エラーになる
-
WordPress 設定 関数の使い方
【WordPress】ウィジェット機能の追加
-
WordPress
【WordPress】管理画面をカスタマイズする
-
WordPress 関数の使い方
【WordPress】get_template_part の使い方
-
WordPress プラグイン
【WordPressプラグイン】Advanced Custom Fieldsの出力
-
PHP WordPress
term_description()からpタグを消す