Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

各記事のカテゴリ名を取得する方法

No Comment wordpress

やりたいこと・・・ループ内でカテゴリ名が「オススメ」の時だけ「オススメ記事」という文字列を出力する。

<?php if(have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
<li>
<a href="<?php the_permalink();?>"><?php the_title();?></a>
<?php foreach((get_the_category()) as $cat){
$catName = $cat->name;
if($catName == 'オススメ') {echo "オススメ記事";}
} ?>
</li>
<?php endwhile ; else : ?>
<p>記事が見つかりません。</p>
<?php endif;?>

※何故foreachを使うか?
get_the_category()で取得したデータは「stdClass Object」というクラスオブジェクト。
これにprint_rをかけると

Array
(
    [0] => stdClass Object
        (
            [term_id] => 53
            [name] => オススメ記事
            [slug] => asdasd
            [term_group] => 0
            [term_taxonomy_id] => 54
            [taxonomy] => category
            [description] => 説明
            [parent] => 0
            [count] => 13
            [object_id] => 1147
            [cat_ID] => 53
            [category_count] => 13
            [category_description] => 説明
            [category_nicename] => asdasd
            [category_parent] => 0
        )

    [1] => stdClass Object
        (
            [term_id] => 16
            [name] => 普通の記事
            [slug] => asdasd
            [term_group] => 0
            [term_taxonomy_id] => 16
            [taxonomy] => category
            [description] =>
            [parent] => 44
            [count] => 5
            [object_id] => 1147
            [cat_ID] => 16
            [category_count] => 5
            [category_description] =>
            [cat_name] =>普通の記事
            [category_nicename] => asdasd
            [category_parent] => 44
        )

)

のように、配列の中にstdClass Objectとして格納されていることが分かる。
(多次元配列ではない)
classの中の変数「メンバ変数」を取り出すには、「->(アロー演算子)」を使う。
例えば一つしかカテゴリに属していないとして、その中からnameを取り出すには、

$catData = get_the_category();
$catName = $catData[0]->name;
echo $catName;

としてやればいいが、実際はカテゴリの数だけ配列が増えるので、foreachを使って

<?php foreach((get_the_category()) as $cat){
$catName = $cat->name;
if($catName == 'オススメ') {echo "オススメ記事";}
} ?>

とする。
すると配列[0][1][2]...と順番に処理されていき、nameが「オススメ」という文字列なら、「オススメ記事」が表示される。

参考
foreach文
クラスとオブジェクト
多次元配列
stdClass Object