カテゴリー別に投稿記事のタイトルを表示するコードを、以前の投稿でquery_postsで書きましたが、get_posts()を使ったコードについて書きます。
下の画像は、Twenty Twelveを使用してカテゴリー別に投稿記事のタイトルを表示するイメージになります。

下のコードが、カテゴリー別に記事の一覧を表示するコードになります。
<?php
$categories = get_categories(array('parent'=>0));
foreach($categories as $category) :
?>
<header class="entry-header">
<h1 class="entry-title"><a href="<?php the_permalink($category->cat_name); ?>"> <?php echo $category->cat_name; ?></a></h1>
</header>
<?php //global $post;
$args = array( 'numberposts' => 5, 'category' => $category->cat_ID);
$mypost = get_posts( $args );?>
<ul class="entry-content-front">
<?php foreach( $mypost as $post ) : setup_postdata($post); ?>
<li class="entry-title-front"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'twentytwelve' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
query_posts()版と似たようなコードになり、get_posts()にパラメータを設定するコードまでは、query_posts()ほぼ同じです。(ulタグの位置が違うようですが無視してください。)
次のループの部分だけ違います。
get_postsではforeachを使用して、query_postsではwhileを使用しています。
get_posts()では、投稿のリストを$mypostに代入して、それをforeachを使用してグローバル変数の$postに記事オブジェクトを渡して$postを上書きしています。(※$postの名前を変更すると表示されません。)
set_postdata($post)は、記事を整形する機能があります。
ただし、上の記事の場合無くても表示されます。
set_postdata($post)がないとき、the_content()を使用しても表示されません。set_postdata($post)を使うとthe_post()と同じようにthe_content()を使ったときに表示してくれます。
wp_rest_postdata()で$postをリセットしています。
style.css
上記のコードを使用した場合、上の画像の表示のCSSが下のコードになります。
.entry-header {
margin-bottom: 12px;
margin-bottom: 0.8571428571rem;
}
.entry-header .entry-title {
border-bottom: 1px solid rgb(204,204,204);
}
ul.entry-content-front {
line-height: 1.846153846;
font-size: 18px;
margin-bottom: 36px;
list-style: disc inside;
}
スポンサーリンク


コメント