こんにちは。
ゆうや(@yuyaphotograph)です!
この記事では、
- ウィジェットから挿入したWordPress Popular Posts 人気記事一覧のカテゴリー表示順をカテゴリー名順ではなく、最下層のカテゴリーから順に表示したいけどやり方が分からなくて困っている
- マサオカブログさんの記事「同じカテゴリの人気記事を表示する」のコードを使っていて、「孫 > 子 > 親」の順にカテゴリーを表示させたい
という方のお悩みを解決します!
WPP デフォルトのカテゴリー表示順は?
WordPressのカテゴリー表示順は「カテゴリーの名前順」がデフォルトとなっています。
そのため例えば以下の記事の場合、希望の「子 > 親」という順番ではなく「親 > 子」という順番で表示されてしまいます。
例)親カテゴリー「漫画」と子カテゴリー「鬼滅の刃」を持つ記事A
逆に以下の場合は「子 > 親」の順番で表示されます。
例)親カテゴリー「漫画」と子カテゴリー「アクタージュ」を持つ記事B
上記のように記事によってカテゴリーの表示順が変わってしまうのは違和感を感じます。
どんな名前のカテゴリーのパターンでも確実に「孫 > 子 > 親」という順番で表示させるコードを以下で紹介していきます。
最下層のカテゴリーを取得して順番に表示
カテゴリーを「カテゴリー,カテゴリー,カテゴリー」というように表示する時によく使われているのは、「the_category(‘ , ‘)」です。
例えば「漫画」親カテゴリーと「鬼滅の刃」子カテゴリーがついている記事の場合、「漫画,鬼滅の刃」というように表示される仕様です。
その場合に実際に使用するコードは以下。
コード
<h4 class="widgettitle dfont label-popular">
<i class="fa fa-line-chart"></i>
「<?php the_category(' , ') ?>」</br>
同じカテゴリの人気記事
</h4>
本題です。
どんな名前のカテゴリーのパターンでも、最下層のカテゴリーから順に表示させるには、
少し長いですが以下のコードを使いましょう〜
コード
<h4 class="widgettitle dfont label-popular">
<i class="fa fa-line-chart"></i>
「<?php $post_cats = get_the_category();
if($post_cats){
$bottom_cat = $post_cats[0];
$bottom_anc = get_ancestors($bottom_cat->term_id, 'category');
foreach ($post_cats as $index => $cat) {
if ($index > 0) {
$anc = get_ancestors($cat->term_id, 'category');
if(count($anc) > count($bottom_anc)){
$bottom_cat = $cat;
$bottom_anc = $anc;
}
}
}
//カテゴリーが1個しかついていない場合
if (!$post_cats[1] && !$post_cats[2]) {
echo '<a href="'.esc_url(get_category_link($bottom_cat->term_id)).'" rel="category tag">'.$bottom_cat->name.'</a>';
} elseif ($post_cats[1] && !$post_cats[2]) { //カテゴリーが2個ついている場合
echo '<a href="'.esc_url(get_category_link($bottom_cat->term_id)).'" rel="category tag">'.$bottom_cat->name.'</a>,';
foreach ($bottom_anc as $index => $anc) {
$cat = get_category($anc);
echo '<a href="'.esc_url(get_category_link($cat->term_id)).'" rel="category tag">'.$cat->name.'</a>';
}
} elseif ($post_cats[1] && $post_cats[2]) { //カテゴリーが3個ついている場合
echo '<a href="'.esc_url(get_category_link($bottom_cat->term_id)).'" rel="category tag">'.$bottom_cat->name.'</a>,';
foreach ($bottom_anc as $index => $anc) {
$cat = get_category($anc);
if ($index == 0) {
echo '<a href="'.esc_url(get_category_link($cat->term_id)).'" rel="category tag">'.$cat->name.'</a>,';
} else {
echo '<a href="'.esc_url(get_category_link($cat->term_id)).'" rel="category tag">'.$cat->name.'</a>';
}
}
}
}
?>」</br>
同じカテゴリの人気記事</h4>
注意
同じ階層のカテゴリーを2つ以上つけている場合にはうまく表示されないのでご了承ください。カテゴリーのアーカイブページでもうまく表示されないのでご了承くださいまし。お世話になったページ
参考 親、子、孫の順でカテゴリを表示したいWORDPRESS.ORGまとめ
以上、WordPress Popular Postsで同じカテゴリーの人気記事一覧をサイドバーに挿入している方向けに、どんな名前のカテゴリーのパターンでも最下層のカテゴリーから順に表示する方法を紹介しました。
うまくいきましたかね?