やりたいこと・・・ループ内でカテゴリ名が「オススメ」の時だけ「オススメ記事」という文字列を出力する。
<?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が「オススメ」という文字列なら、「オススメ記事」が表示される。