アド企画 制作部
アド企画 制作部
 

WordPressの固定ページで記事一覧とページネーション(ページング)を実現する:1

WordPressの固定ページで記事一覧とページネーション(ページング)を実現する:1


1) WordPressのWP_Queryオブジェクトからページネーション(ページング)用の配列を生成するfunction

2) WordPressの記事一覧とページネーション(ページング)用配列を取得するfunction

前回までに、上記2つのfunctionをfunctions.phpに追加した。


今回は、この2つのfunctionを使って、WordPressの固定ページ内に記事一覧を表示させる。
「次のページ」「前のページ」として表示する記事一覧を切り替えるために、固定ページにページ番号を指定して実現させる。

固定ページで「paged」を有効にする。

WordPressのアーカイブページでは、URLに「?paged=2」などをつけて$_GETでページ番号を付ける事ができる。 実際にはURLが「.../page/2/」などとして書き換えられる。
このページ番号の指定は、 get_query_var('paged') として取得できる。

「paged」の値と書き換え(リライト)ルールは、WordPressに最初から定義されているので、固定ページでもこの「paged」を使って実現したいと考えた。


ところが!
WordPressめ、固定ページの場合は「paged」が取得できない仕様になっているようで、一向に取得できなかった。

逆に考えれば、『固定ページの場合は「paged」が取得できるパターンは想定外』という事だと思ったので、独自のカスタムパラメータを受け取れるようにするよりも、「paged」を生かしたい。


独自パラメータの書き換えルール(rewrite_rule)を最初から追加するのは色々と面倒なので、この方が都合がいい。

具体的には、次のコードをfunctions.phpに追記する。

function my_parse_query( $query ) {
	if(!isset($query->query_vars['paged']) && isset($query->query_vars['page']) ){
		$query->query_vars['paged'] = $query->query_vars['page'];
	}
}
add_action( 'parse_query', 'my_parse_query' );

これで「paged」の書き換えルール(rewrite_rule)の定義が無い場合は定義され、ページ番号の指定があれば、固定ページでも「get_query_var('paged')」で取得できるようになる。

固定ページで記事一覧を取得する

前回までに準備した次の2つのfunction

1) WordPressのWP_Queryオブジェクトからページネーション(ページング)用の配列を生成するfunction
2) WordPressの記事一覧とページネーション(ページング)用配列を取得するfunction

と、前項のWordPressの固定ページでpagedを有効にするためのものをfunctions.phpに追記したうえで、固定ページで次のコードを実行する事で、記事一覧とページ一覧を取得する事ができる。

/*
 page.phpに次のコードを記述すると、
 記事一覧とページ一覧が取得できる。

実際には、
if(is_page() && $post->post_name == 'slugname')
if(is_page() && $post->ID == 2)
などのIF文で、記事一覧を取得したい固定ページの
スラッグ名やIDを条件に処理させる事になる
*/


$args = array();
$args['posts_per_page'] = $posts_per_page;
$args['paged'] = get_query_var('paged');
$rs = get_posts_pagenation_org($args,'ALL',true);

なお、$argsにはWP_Queryオブジェクトを作成する際の引数が設定できるので、(任意の引数パラメータを使用する場合は$_GETの値を駆使することになるが、)$argsでカテゴリーを指定したり、ソート指定をしたり、記事投稿ユーザーを絞り込んだり…という指定が可能である。

※ WP_Queryで指定できる値については、 関数リファレンス/WP Query - WordPress Codex 日本語版 を参照