2025.6.24|WordPress

WordPress(ワードプレス)で投稿記事に属する特定の親カテゴリーの子カテゴリーをリスト表示する実装方法

WordPress(ワードプレス)で投稿記事に属する特定の親カテゴリーの子カテゴリーをリスト表示する実装方法

WordPress(ワードプレス)は、非常に柔軟性に優れたCMS(コンテンツ管理システム)であり、カテゴリや投稿タイプ、固定ページなどの属性に応じた条件分岐が標準機能として備わっています。これにより、同じテンプレートファイルを使いながらも、ページの種類や目的に合わせたレイアウトやコンテンツの出し分けが可能となり、ユーザー体験をより洗練されたものにすることができます。
ある投稿記事が特定の親カテゴリー(例:「ニュース」や「製品情報」など)に属している場合、その親カテゴリーの子カテゴリーを自動的に一覧表示することで、関連性の高い情報を視覚的に示すことができ、ユーザーの回遊性を高める効果が期待できます。

たとえば、「製品情報」という親カテゴリーの下に「スマートフォン」「ノートパソコン」「周辺機器」などの子カテゴリーがある場合、投稿が「製品情報」カテゴリに属しているときだけ、これら子カテゴリーを一覧で表示させたい場面があるでしょう。
WordPress(ワードプレス)では、投稿が属するカテゴリー情報を取得し、その中に特定の親カテゴリーが含まれているかを判定したうえで、該当する子カテゴリーをリスト化する処理を行うことができます。

今回は、WordPress(ワードプレス)で投稿記事に属する特定の親カテゴリーの子カテゴリーをリスト表示する実装方法を解説します。

「親カテゴリー」と「子カテゴリー」の関係について

WordPress(ワードプレス)における「親カテゴリー」と「子カテゴリー」は、投稿記事を階層的に分類するための仕組みです。これにより、記事の内容をより論理的に整理し、訪問者にとっても情報を見つけやすい構造を作ることができます。まず、「親カテゴリー」とは、カテゴリーの中でも上位に位置する大分類のことを指します。たとえば、「製品情報」や「ニュース」など、サイト全体のテーマを代表するような広いカテゴリがこれにあたります。

一方で「子カテゴリー」は、親カテゴリーの下位に属するサブカテゴリです。より具体的な内容に分類するために使われ、たとえば「製品情報」という親カテゴリーの下に「スマートフォン」「ノートパソコン」「周辺機器」といった子カテゴリーを設けることで、情報の整理がしやすくなります。
このように親子関係を設定することで、WordPress上の投稿は「大分類 → 小分類」という明確な構造で整理され、ユーザーにとっても目的の記事にたどり着きやすくなるのが特徴です。

また、WordPressの管理画面では、カテゴリー作成時に「親カテゴリー」を指定することで簡単に階層構造を作ることができます。子カテゴリーを作成したい場合は、カテゴリーの追加時に親カテゴリーを選択するだけで、自動的に階層化されます。
このようなカテゴリーの階層化は、記事一覧のナビゲーションやパンくずリスト、サイドバーのカテゴリー表示などにも活用され、サイト全体の構造をより分かりやすくする役割を果たします。

投稿記事に属する特定の親カテゴリーの子カテゴリーをリスト表示する実装方法

WordPress(ワードプレス)で投稿記事に属する特定の親カテゴリーの子カテゴリーをリスト表示したい場合は、投稿が属しているカテゴリーを取得し、そこに指定した親カテゴリーが含まれているかを判定します。親カテゴリーに属していることが確認できたら、その親カテゴリーに紐づく子カテゴリーの一覧を取得し、HTMLリストとして表示します。

具体的には、WordPress(ワードプレス)が提供する関数「get_the_category()」を使って現在の投稿のカテゴリーを取得し、「get_category_by_slug() 」で特定の親カテゴリーを指定、さらに「get_categories()」関数を使ってその親カテゴリーにぶら下がっている子カテゴリーを取得します。その後、取得した子カテゴリーをループ処理で表示します。

このように、WordPress(ワードプレス)のカテゴリ階層と条件分岐機能を活用することで、投稿内容に応じた動的な表示が可能となり、より整理された情報提供が実現できます。 また、カスタム投稿タイプを追加して投稿した記事に属しているカテゴリー(ターム)を表示する場合は、3つのテンプレートタグ・関数があります。

【カテゴリー(ターム)を出力するテンプレートタグ・関数】
・get_terms
・get_categories
・wp_list_categories

「get_terms」を使ってカテゴリー(ターム)表示

「get_terms」を使ってカテゴリー(ターム)表示をする場合、パラメータ(Parameter)で条件を指定することで表示内容や表示方法を変更できます。

基本パラメータ
<?php 
// タクソノミーにはデフォルト値がないので下記を例として使う。
$taxonomies = array( 
    'post_tag',
    'my_tax',
);

$args = array(
    'orderby'       => 'name', 
    'order'         => 'ASC',
    'hide_empty'    => true, 
    'exclude'       => array(), 
    'exclude_tree'  => array(), 
    'include'       => array(),
    'number'        => '', 
    'fields'        => 'all', 
    'slug'          => '', 
    'parent'        => '',
    'hierarchical'  => true, 
    'child_of'      => 0, 
    'childless'     => false,
    'get'           => '', 
    'name__like'    => '',
    'description__like' => '',
    'pad_counts'    => false, 
    'offset'        => '', 
    'search'        => '', 
    'cache_domain'  => 'core'
); 

$terms = get_terms( $taxonomies, $args );
?>
テンプレートタグ(リンク無し)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。

<?php
$terms = get_terms('category'); // タクソノミースラッグを指定
foreach( $terms as $term ) {
echo '<li>'.$term->name.'</li>';
}
?>
テンプレートタグ(リンク付き)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。

<?php
$terms = get_terms('category'); // タクソノミースラッグを指定
foreach ( $terms as $term ) {
echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}
?>
テンプレートタグ(リンク付き・件数)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。
※件数表示には「count」パラメータを追加します。

<?php
$terms = get_terms('category'); // タクソノミースラッグを指定
foreach ( $terms as $term ){
echo '<li><a href="'.get_term_link($term).'">'.$term->name.'('. $term->count .')'.'</a></li>';
}
?>
テンプレートタグ(子カテゴリーのみ)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。
※「parent」パラメータに表示したい子カテゴリーの「親カテゴリーID」を記述します。

<?php
$args = array(
'parent' => 親カテゴリーID,
);
$terms = get_terms( 'category', $args ); // タクソノミースラッグを指定
foreach ( $terms as $term ) {
echo '<li><a href="' . get_term_link($term) . '">' . $term->name . '</a></li>';
}
?>

「get_categories」を使ってカテゴリー(ターム)表示

「get_categories」を使ってカテゴリー(ターム)表示をする場合、パラメータ(Parameter)で条件を指定することで表示内容や表示方法を変更できます。

基本パラメータ
<?php 
$args = array(
	'type'                     => 'post',
	'child_of'                 => 0,
	'parent'                   => '',
	'orderby'                  => 'name',
	'order'                    => 'ASC',
	'hide_empty'               => 1,
	'hierarchical'             => 1,
	'exclude'                  => '',
	'include'                  => '',
	'number'                   => '',
	'taxonomy'                 => 'category',
	'pad_counts'               => false 
); 
?>
テンプレートタグ(リンク無し)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。

<?php
$args = array(
'taxonomy' => 'category' // カスタムタクソノミースラッグを指定
);
$categories = get_categories($args);
foreach($categories as $category) {
echo '<li>'.$category->name.'</li>';
}
?>
テンプレートタグ(リンク付き)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。

<?php
$args = array(
'taxonomy' => 'category' // カスタムタクソノミースラッグを指定
);
$categories = get_categories($args);
foreach($categories as $category) {
echo '<li><a href="'.get_category_link($category->term_id).'">'.$category->name.'</a></li>';
}
?>
テンプレートタグ(リンク付き・件数)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。
※件数表示には「count」パラメータを追加します。

<?php
$args = array(
'taxonomy' => 'category', // カスタムタクソノミースラッグを指定
);
$categories = get_categories($args);
foreach( $categories as $category ) {
echo '<li><a href="'.get_category_link($category->term_id).'">'.$category->name.'('.$category->count.')'.'</a></li>';
}
?>
テンプレートタグ(子カテゴリーのみ)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。
※「parent」パラメータに表示したい子カテゴリーの「親カテゴリーID」を記述します。

<?php
$args = array(
'taxonomy' => 'category' // カスタムタクソノミースラッグを指定
'parent' => '親カテゴリーID',
);
$categories = get_categories($args);
foreach($categories as $category) {
echo '<li><a href="'.get_category_link($category->term_id).'">'.$category->name.'</a></li>';
}
?>

「wp_list_categories」を使ってカテゴリー(ターム)表示

「wp_list_categories」を使ってカテゴリー(ターム)表示をする場合、パラメータ(Parameter)で条件を指定することで表示内容や表示方法を変更できます。

基本パラメータ
<?php 
    $args = array(
	'show_option_all'    => '',
	'orderby'            => 'name',
	'order'              => 'ASC',
	'style'              => 'list',
	'show_count'         => 0,
	'hide_empty'         => 1,
	'use_desc_for_title' => 1,
	'child_of'           => 0,
	'feed'               => '',
	'feed_type'          => '',
	'feed_image'         => '',
	'exclude'            => '',
	'exclude_tree'       => '',
	'include'            => '',
	'hierarchical'       => 1,
	'title_li'           => __( 'Categories' ),
	'show_option_none'   => __( '' ),
	'number'             => null,
	'echo'               => 1,
	'depth'              => 0,
	'current_category'   => 0,
	'pad_counts'         => 0,
	'taxonomy'           => 'category',
	'walker'             => null
    );
    wp_list_categories( $args ); 
?>
テンプレートタグ(リンク付き)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。

<?php wp_list_categories( array('title_li' => '', 'taxonomy' => 'category' ) ); ?> // カスタムタクソノミースラッグを指定
テンプレートタグ(リンク付き・件数)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。
※件数表示には「show_count」パラメータを追加します。

<?php wp_list_categories( array('title_li' => '', 'show_count' => '1', 'taxonomy' => 'category' ) ); ?> // カスタムタクソノミースラッグを指定
テンプレートタグ(子カテゴリーのみ)

※「category」部分にはカスタム投稿タイプの「タクソノミースラッグ」を指定します。
※「child_of」パラメータに表示したい子カテゴリーの「親カテゴリーID」を記述します。

<?php wp_list_categories( array('title_li' => '', 'child_of' => '親カテゴリーID', 'taxonomy' => 'category' ) ); ?> // カスタムタクソノミースラッグを指定

まとめ

WordPress(ワードプレス)では、テンプレートタグや条件分岐タグを組み合わせて、投稿記事に属する特定の親カテゴリーの子カテゴリーのみをリスト表示することが可能です。
カテゴリ情報を取得するための関数や条件分岐は非常に多く、それぞれ取得できる内容や使えるパラメーターに違いがあります。今回のように特定の親カテゴリーに紐づく子カテゴリーを表示させたい場合は、get_categories() や get_the_category() などを使い分けながら処理を組み立てることが大切です。

まずは投稿記事の中で現在所属しているカテゴリを判別し、その中から親カテゴリーを見つけて、そのIDを使って子カテゴリを抽出・表示する流れを覚えておくと、さまざまなカスタマイズにも応用が効くようになります。
よく使うパラメータや関数の挙動を少しずつ理解しておくことで、WordPressの柔軟なカスタマイズに役立てることができます。