Codeworks Notes

 2021-01-26

 2022-01-18

Wordpress
バックエンド

ページネーションを表示する

記事一覧がページ分けされている時、全体のページ数と現在のページが分かり、前後へのページ遷移が自由に行えるナビゲーションをページネーションとかページャー とか言ったりします。

プラグインを使う場合

WP-PageNaviというのがあります。
使い方とかは別途調べれば色々見つかる。

プラグインを使わない場合

functions.php に書きます。
pagination.php にして functions.php から require_once してもいいです。

<?php
/**
* ページネーション出力関数
* $paged : 現在のページ
* $pages : 全ページ数
* $range : 左右に何ページ表示するか
* $show_only : 1ページしかない時に表示するかどうか
*/
function pagination( $pages, $paged, $range = 2, $show_only = false ) {

	$pages = ( int ) $pages;    //float型で渡ってくるので明示的に int型 へ
	$paged = $paged ?: 1;       //get_query_var('paged')をそのまま投げても大丈夫なように

	//表示テキスト
	$to_first   = "最初へ";
	$to_prev  = "前へ";
	$to_next    = "次へ";
	$to_last    = "最後へ";

	if ( $show_only && $pages === 1 ) {
		// 1ページのみで表示設定が true の時
		echo '<div class="pagination"><span class="page_current pager">1</span></div>';
		return;
	}

	if ( $pages === 1 ) return;    // 1ページのみで表示設定もない場合

	if ( 1 !== $pages ) {
		//2ページ以上の時
		echo '<div class="pagination"><span class="page_number">Page ', $paged ,' of ', $pages ,'</span>';
		if ( $paged > $range + 1 ) {
			// 「最初へ」 の表示
			echo '<a href="', get_pagenum_link(1) ,'" class="page_first">', $to_first ,'</a>';
		}
		if ( $paged > 1 ) {
			// 「前へ」 の表示
			echo '<a href="', get_pagenum_link( $paged - 1 ) ,'" class="page_prev">', $to_prev ,'</a>';
		}
		for ( $i = 1; $i <= $pages; $i++ ) {

			if ( $i <= $paged + $range && $i >= $paged - $range ) {
				// $paged +- $range 以内であればページ番号を出力
				if ( $paged === $i ) {
					echo '<span class="page_current pager">', $i ,'</span>';
				} else {
					echo '<a href="', get_pagenum_link( $i ) ,'" class="pager">', $i ,'</a>';
				}
			}

		}
		if ( $paged < $pages ) {
			// 「次へ」 の表示
			echo '<a href="', get_pagenum_link( $paged + 1 ) ,'" class="page_next">', $to_next ,'</a>';
		}
		if ( $paged + $range < $pages ) {
			// 「最後へ」 の表示
			echo '<a href="', get_pagenum_link( $pages ) ,'" class="page_last">', $to_last ,'</a>';
		}
		echo '</div>';
	}
}
?>