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