WordPressの記述には、記事ループがたくさん出てきます。
よく使う3パターンを備忘録として。
普通に記事ループさせる
ごく普通の記事ループです。
カテゴリー・タグ・日付・アイキャッチ画像・タイトル・抜粋を表示させています。
<ul class="list">
<?php
$args = array(
'posts_per_page' => -1, //表示件数
'category_name' => 'sample' //カテゴリー
);
$posts = get_posts($args);
foreach ($posts as $post) {
setup_postdata($post);
?>
<li>
<a class="post" href="<?php the_permalink(); ?>">
<p class="cate"><?php $category = get_the_category();
$cat_name = $category[0]->cat_name;
echo $cat_name; ?></p>
<p class="tag"><?php $tags = get_tags();
if ($tags) {
foreach ($tags as $tag) {
echo $tag->name . '';
}
} ?></p>
<p class="date"><?php the_time("Y.n.j"); ?></p>
<p class="thumb"><?php the_post_thumbnail(); ?></p>
<p class="ttl"><?php the_title(); ?></p>
<p class="txt><?php echo get_the_excerpt(); ?></p>
</a>
</li>
<?php
}
wp_reset_postdata();
?>
</ul>
the_date(“Y.n.j”);だと同日更新記事のときに表示されなくなるので、the_time(“Y.n.j”);がおすすめ。
‘posts_per_page’ => -1・・表示させたい個数を記述、「-1」で全件表示
‘category_name’ => ‘sample’・・カテゴリーを絞り込んで表示する場合は記述、空白で全カテゴリー表示
ループする記事がないときにテキストを出す
記事がなかった場合に「記事がありません」と表示したい場合⬇️
<ul class="list">
<?php
$args = array(
'posts_per_page' => 5, //表示件数
'category_name' => 'sample' //カテゴリー
);
$posts = get_posts($args);
if (!empty($posts)) {
foreach ($posts as $post) {
setup_postdata($post);
?>
<li>
<a class="post" href="<?php the_permalink(); ?>">
<p class="cate">
<?php
$category = get_the_category();
$cat_name = $category[0]->cat_name;
echo $cat_name;
?>
</p>
<p class="tag">
<?php
$tags = get_tags();
if ($tags) {
foreach ($tags as $tag) {
echo $tag->name . '';
}
}
?>
</p>
<p class="date"><?php the_time("Y.n.j"); ?></p>
<p class="thumb"><?php the_post_thumbnail(); ?></p>
<p class="ttl"><?php the_title(); ?></p>
<p class="txt"><?php echo get_the_excerpt(); ?></p>
</a>
</li>
<?php
}
} elseif (empty($myposts)) {
?>
<p class="empty">記事がありません</p>
<?php
}
wp_reset_postdata();
?>
</ul>
固定ページで記事ループにページネーションをつける
先程の「記事がありません」に加え、固定ページで記事ループさせるときにページネーションをつける場合⬇️
<div class="sample">
<ul class="list">
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$the_query = new WP_Query(array(
'post_status' => 'publish',
'post_type' => 'post',
'paged' => $paged,
'posts_per_page' => 7, //表示件数
'category_name' => 'sample', //カテゴリー
'orderby' => 'date',
'order' => 'DESC'
));
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$the_query->the_post(); ?>
<li>
<a class="post" href="<?php the_permalink(); ?>">
<p class="cate"><?php $category = get_the_category();
$cat_name = $category[0]->cat_name;
echo $cat_name; ?></p>
<p class="tag"><?php $tags = get_tags();
if ($tags) {
foreach ($tags as $tag) {
echo $tag->name . '';
}
} ?></p>
<p class="date"><?php the_date("Y.n.j"); ?></p>
<p class="thumb"><?php the_post_thumbnail(); ?></p>
<p class="ttl"><?php the_title(); ?></p>
<p class="txt"><?php echo get_the_excerpt(); ?></p>
</a>
</li>
<?php
}
} else {
echo '<p class="post_empty">記事がありません</p>';
}
?>
</ul>
<div class="pagination">
<?php
global $wp_rewrite;
$paginate_base = get_pagenum_link(1);
if (strpos($paginate_base, '?') || !$wp_rewrite->using_permalinks()) {
$paginate_format = '';
$paginate_base = add_query_arg('paged', '%#%');
} else {
$paginate_format = (substr($paginate_base, -1, 1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/', 'paged');
$paginate_base .= '%_%';
}
echo paginate_links(array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $the_query->max_num_pages,
'mid_size' => 1,
'current' => ($paged ? $paged : 1),
'prev_text' => '< 前へ',
'next_text' => '次へ >',
));
?>
</div>
</div>
ページネーションのパラメータと初期値は下記⬇️
'base' => '%_%', //ページネーションのURL
'format' => '?page=%#%', //ページネーションの表示
'total' => 1, //全体のページ数
'current' => 0, //現在のページ番号
'show_all' => true, //ページ番号全て表示
'end_size' => 1, //両端に表示する数字の数
'mid_size' => 2, //現在のページの両端に表示する数字の数
'prev_next' => true, //前へ次へを含むか
'prev_text' => __('« Previous') // 前へのテキスト
'next_text' => __('Next »'), // 次へのテキスト