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();
}
?>
同じカテゴリーのコンテンツ