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 日本語版 を参照
