固定ページにカスタム投稿タイプの一覧ページを作成する

固定ページにカスタム投稿タイプの一覧ページを作成するのアイキャッチ画像

カスタム投稿タイプの一覧系ページを固定ページで作成する方法を紹介します。コード例はよく使われるパラメーターを使用しています。

WP_Queryを使ってページネーションに対応させる

ページネーションに対応させるために、WP_Queryを使って情報を取得する例です。

アーカイブ一覧を固定ページに設置する

<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1 ; //ページの判定
$args =	array(
		'posts_per_page'   => 20, //表示件数
		'orderby'          => 'date', //ソートの基準
		'order'            => 'DESC', //DESC降順 ASC昇順
		'post_type'        => 'post', //投稿タイプ名postは通常の投稿
		'post_status'      => 'publish', //公開状態
		'caller_get_posts' => 1, //取得した記事の何番目から表示するか
		'paged'            =>  $paged //ページネーションに必要
);
$wp_query = new WP_Query($args);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>

//ループ内の処理

<?php endwhile; ?>

タームの一覧を固定ページに設置する

projects投稿タイプのprojectscatというタクソノミー名でpublishedというターム名の一覧を取得する場合。

<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1 ;
$args =	array(
		'posts_per_page'   => 20,
		'orderby'          => 'date',
		'order'            => 'DESC',
		'post_type'        => 'projects',
		'tax_query' => array(
			array(
				'taxonomy' => 'projectscat', //タクソノミー名
				'field' => 'slug',
				'terms' => 'published' //タームのスラッグ
				)
			),
		'post_status'      => 'publish',
		'caller_get_posts' => 1,
		'paged'            =>  $paged
);
$wp_query = new WP_Query($args);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>

//ループ内の処理

<?php endwhile; ?>

ページネーション

前述のループに対応したページネーションです。当サイトもこの設定です。

  <?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' => $wp_query->max_num_pages,
  'type'  => 'list', //ul liで出力
  'mid_size' => 1, //カレントページの前後
  'end_size' => 0,
  'current' => ($paged ? $paged : 1),
  'prev_text' => '<',
  'next_text' => '>',
  ));
  ?>