Learning site for website creation

41:サブループ用ページネーション出力関数

公開日:2019年07月30日

サブループ用ページネーション出力方法について。

ページ番号取得方法

サブループではページ番号情報を「get_query_var(‘page’)」で取得します。

メインループの「get_query_var(‘paged’)」と違うので注意します。

最大ページ数の取得

サブループの最大ページ数情報はWP_Queryオブジェクトを代入した変数を使用します。

$the_query = new WP_Query($args);」

メインループで最大ページ数情報は暗黙変数「$wp_query」を使用します。

サブループ用ページネーション関数

functions.php

「global $the_query;」と関数内で使用している「$the_query」はサブループ情報を入れた変数名にすること。

$the_query = new WP_Query($args);」

/*********************************
 サブループページネーション出力用関数
**********************************/
function subPagination($end_size = 1, $mid_size = 2, $prev_next = true) {
  global $the_query;

  $page_format = paginate_links(
    array(
      'current' => max(1, get_query_var('page')),
      'total' => $the_query->max_num_pages,
      'type'  => 'array',
      'prev_text' => '前へ',//前へのリンク文言
      'next_text' => '次へ',//次へのリンク文言
      'end_size' => $end_size,//初期値:1  両端のページリンクの数
      'mid_size' => $mid_size,//初期値:2  現在のページの両端にいくつページリンクを表示するか(現在のページは含まない)
      'prev_next' => $prev_next,//初期値:true  リストの中に「前へ」「次へ」のリンクを含むか
    )
  );
  $code = '';
  if( is_array($page_format) ) {
    $paged = get_query_var('page') == 0 ? 1 : get_query_var('page');
    $code .= '<div class="pagination">'.PHP_EOL;
    $code .= '<ul>'.PHP_EOL;
    foreach ( $page_format as $page ) {
      $code .= '<li>'.$page.'</li>'.PHP_EOL;
    }
    $code .= '</ul>'.PHP_EOL;
    $code .= '</div>'.PHP_EOL;
    $code .= '<div class="pagination-total">'.$paged.'/'.$the_query->max_num_pages.'</div>'.PHP_EOL;
  }
  wp_reset_query();
  return $code;
}

ページネーションありサブループ

サブループ表示テンプレート

<?php
// ページ番号取得
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
// サブループ条件
$args = array(
  'post_type' => 'post', // 投稿
  'posts_per_page' => 2, // 表示件数
  'category_name' => 'works', // カテゴリ
  'paged' => $paged, // ページ番号
);
// サブループ情報を取得して「$the_query」変数に代入
$the_query = new WP_Query($args);
?>
<?php /***** サブループ開始 *****/ ?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : ?>
<?php $the_query->the_post(); ?>

<?php /**** ▼1件分の投稿内容HTML ****/ ?>
      <div class="box">
        <a href="<?php the_permalink(); ?>">
          <div class="item-title"><?php the_title(); ?></div>
        </a>
      </div><!-- .box -->
<?php /**** ▲1件分の投稿内容HTML ****/ ?>

<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

<?php /***** サブループ終了 *****/ ?>
<?php // ページネーション ?>
<?php
if ( subPagination() ) {
  echo subPagination();
}
?>