WordPress
WordPressで投稿タイプの取得やページネーションの表示がうまくいかないとき
WordPressで、投稿を表示しようとして、投稿タイプを指定しても絞られなかったり、ページネーションが表示されなくて困っていますか?
ここでは、その時にまず確認してもらいたいことをご説明します。
固定ページの場合
single.php
, archive.php
, taxonomy.php
では、投稿が扱われる前提となっています。
例えば、infoというカスタム投稿タイプの投稿ページは、ファイル名をsingle-info.phpとします。
これらページでは必要ないのですが、固定ページの場合は、WP_QueryというWordPressのクラスを用いることで、投稿データを扱うことができるようになります。
また、ページネーションも投稿ページの書き方とは異なります。
以下のような記述になります。
<ul class="posts-list">
<?php
$args = array(
'posts_per_page' => 10, // 表示する投稿数
'paged' => $paged, //ページング
'post_type' => 'information', // 取得する投稿タイプのスラッグ
'orderby' => 'date', //日付で並び替え
'order' => 'DESC' // 降順 or 昇順
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
while ($the_query->have_posts()) : $the_query->the_post(); ?>
<li>
<a href="<?php echo get_permalink($post->ID); ?>">
<h3><?php echo get_the_title($post->ID); ?></h3>
<p class="excerpt for-sp"><?php the_excerpt(); ?></p>
</a>
</li>
<?php endwhile; endif; ?>
</ul>
<?php
if ($the_query->max_num_pages > 1) {
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%/',
'current' => max(1, $paged),
'total' => $the_query->max_num_pages,
'end_size' => '1', // ページ番号リストの両端に表示するページ数
'mid_size' => '2', // 現在ページの左右に表示するページ番号の数
'prev_next' => true, // 「前へ」「次へ」のリンクを表示する場合はtrue
'prev_text' => '<', // 「前へ」の文言変更
'next_text' => '>', // 「次へ」の文言変更
'type' => 'list' // 戻り値の指定 (plain/list)
));
}
?>
<?php wp_reset_postdata(); ?>
なお、WP_Queryを使う以外に、global $post
と書いて、グローバル関数の$postを用いる方法もありますが、どこでも投稿データを読み込み、書き込める関数であるため、できるだけ用いるのは避ける方が望ましく、このケースではWP_Queryを用いる方が望ましいと言えます。
投稿関連ページの場合
single.php, archive.php, taxonomy.phpでは、WP_Queryは不要で、例えば以下のように記述すれば大丈夫です。表示したい内容によって書き方は色々ありますので、あくまで一例ということでご確認ください。
<?php
$args = array(
'posts_per_page' => 10, // 表示する投稿数
'paged' => $paged, // ページング
'post_type' => 'information', // 取得する投稿タイプのスラッグ
'orderby' => 'date', //日付で並び替え
'order' => 'DESC' // 降順 or 昇順
);
$my_posts = get_posts($args);
?>
<ul>
<?php foreach ($my_posts as $post) : setup_postdata($post);?>
<li>
<a href="<?php the_permalink(); ?>">
<h3><?php the_title() ;?></h3>
<p><?php the_excerpt() ?></p>
</a>
</li>
<?php endforeach; ?>
</ul>
<?php the_posts_pagination(
array(
'end_size' => '1', // ページ番号リストの両端に表示するページ数
'mid_size' => '2', // 現在ページの左右に表示するページ番号の数
'prev_next' => true, // 「前へ」「次へ」のリンクを表示する場合はtrue
'prev_text' => '<', // 「前へ」の文言変更
'next_text' => '>', // 「次へ」の文言変更
'type' => 'list' // 戻り値の指定 (plain/list)
)
); ?>
<?php wp_reset_postdata(); ?>
まとめ
WordPressで投稿データを出力する方法をまとめました。