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で投稿データを出力する方法をまとめました。

著者のイメージ画像

株式会社BringFlower
稲田 高洋(Takahiro Inada)

2003年から大手総合電機メーカーでUXデザインプロセスの研究、実践。UXデザイン専門家の育成プログラム開発。SEOにおいても重要なW3Cが定めるWeb標準仕様策定にウェブアクセシビリティの専門家として関わる。2010~2018年に人間中心設計専門家を保有、数年間ウェブアクセシビリティ基盤委員も務める。その後、不動産会社向けにSaaSを提供する企業の事業開発部で複数サービスを企画、ローンチ。CMSを提供し1000以上のサイトを分析。顧客サポート、サイト運営にも関わる。
2022年3月に独立後、2024年4月に株式会社BringFlowerを設立。SEOコンサルを活動の軸に据えつつ、AIライティングツールの開発と運営を自ら行う。グッドデザイン賞4件、ドイツユニバーサルデザイン賞2件、米国IDEA賞1件の受賞歴あり。