WEB制作、マーケティングに関する情報をお届けします。ホームページ制作会社、テラのブログ

ワードプレス、カテゴリーの取得と出力一覧

タグ:

WordPress(ワードプレス)でよく使用するカテゴリの取得と表示方法をまとめました。
カテゴリーを取得する方法は複数あります。

  • get_categories()
  • get_the_category()
  • wp_list_catergories()
  • wp_dropdown_categories()
  • wp_terms_checklist()

今回は一番多用されるget_categoriesとget_the_category()で取得・表示させる方法を紹介します。

「ループ外」でカテゴリを一覧を取得する

全てのカテゴリを一覧表示

<?php
$args = array(
    'taxonomy' => 'category', //タクソノミーを指定したい場合はcategoryをスラッグに書き換える
    'hide_empty' => 0, //記事がないカテゴリを出力するかどうか
);
$categories = get_categories($args);
?>
<ul> 
<?php foreach($categories as $category) { ?>
    <li><a href="<?php echo $category_link = get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?>(<?php echo $category->count; ?>)</a></li>
<?php } ?>
</ul>

最上位のカテゴリのみを表示

<?php
$args = array(
    'taxonomy' => 'category', //カスタムタクソノミーを指定したい場合はcategoryを書き換える
    'hide_empty' => 0, //記事がないカテゴリを出力するかどうか
    'parent' => 0, //0で親カテゴリを指定
);
$categories = get_categories($args);
?>
<ul> 
<?php foreach($categories as $category) { ?>
    <li><a href="<?php echo $category_link = get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?>(<?php echo $category->count; ?>)</a></li>
<?php } ?>
</ul>

親子関係を保持したまま表示

<?php
$args = array(
    'taxonomy' => 'category', //タクソノミーを指定したい場合はcategoryを書き換える
    'hide_empty' => 0, //記事がないカテゴリを出力するかどうか
    'parent' => 0, //0で親カテゴリを指定
);
$categories = get_categories($args);
?>
<ul> 
<?php foreach($categories as $category) { ?>
    <li>
    	<a href="<?php echo $category_link = get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?>(<?php echo $category->count; ?>)</a>
    <?php 
        $args = array(
            'hide_empty' => 0,
            'parent' => $category->term_id, //親カテゴリのIDを設定
        );
        $child_categories = get_categories($args); //子カテゴリを取得
        if($child_categories){ //子カテゴリがあれば処理
            ?>
        <ul>
            <?php foreach($child_categories as $child_category) { //子カテゴリでループを回す ?>
                <li><a href="<?php echo $child_category_link = get_category_link( $child_category->term_id ); ?>"><?php echo $child_category->name; ?>(<?php echo $child_category->count; ?>)</a></li>
        <?php }  ?>
        </ul>
        <?php }  ?>
    </li>
<?php } ?>
</ul>

「ループ内(記事内)」でカテゴリの一覧を取得する

以下は全てループ内に記載します。

全てのカテゴリを一覧表示

<?php
    $categories = get_the_category(); //記事に属するカテゴリを取得
?>

<ul> 
<?php foreach($categories as $category) { ?>
    <li><a href="<?php echo $category_link = get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a></li>
<?php } ?>
</ul>

親カテゴリだけを取得・表示する

<?php
    $categories = get_the_category(); //記事に属するカテゴリを取得
?>
<ul> 
<?php foreach($categories as $category) { ?>
    <?php 
       $parent = $category->parent; //親カテゴリの場合は0が入る
       if( $parent == '0'  ){ //親カテゴリの場合だけ出力する
    ?>
    <li><a href="<?php echo $category_link = get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a></li>
    <?php } ?>
<?php } ?>
</ul>

ひとつだけカテゴリを表示する

多数のカテゴリに属する場合は全て出力するとレイアウト崩れの原因になったりすることがあります。
この場合は一つだけ取得・表示する場合があります。

<?php
    $category = get_the_category();
    $category_name = $category[0]->cat_name; 
    $category_link = get_category_link($category[0]->cat_ID);
?>
<a href="<?php echo $category_link ?>"><?php echo $category_name ?></a>

get_the_categoryとget_categoriesの違いについて

get_the_categoryは現在の投稿のカテゴリ情報を取得します。
逆にget_categoriesは投稿以外のカテゴリ全体を取得します。
ループ外で使用する際はget_categories、ループ内で投稿の一覧を取得する際はget_the_categoryを使用します。

表示できるパラメーターの一覧

カテゴリーの情報を取得・表示する際にスラッグだけを取得したい、文字列だけを取得したい時があると思います。
その場合は取得したデータからパラメーターを指定して表示することができます。
以下、一覧です。

$category_id = $category->term_id; //カテゴリID
$category_name = $category->name; //カテゴリ名
$category_slug = $category->slug; //スラッグ
$category_count = $category->count; //カテゴリが関連づけられている記事数
$category_description = $category->description; //カテゴリの説明
$category_parent = $category->parent; //親カテゴリのID(最上位のカテゴリは0)
term_id カテゴリID
name カテゴリ名
slug スラッグ
count カテゴリが関連づけられている記事数
description カテゴリの説明
parent  親カテゴリのID(最上位のカテゴリは0)