
WPのアーカイブページのループ文~ WP Query ~
WordPressのWP_queryをアーカイブページで使った時の注意点
投稿一覧で最新の投稿と、それ以外で表示する形を変えたい
※具体的には、最初の投稿以外をwrapでくくりたい
コーディング思案
loop文の最中にwrapを追加する方法は考えつかなかったので、
単純にloop文を2つ作りました。
内容
- 1つ目のloop文は最新の投稿を1件のみ表示
- 2つ目のloop文には、最新1件をskipしたloop文を10件表示(ここをwrapでくくる)
動作確認時に発覚した問題
カテゴリーページやタグページでも絞り込めない
問題点
- URLは変わっているのに、表示されるものは一緒
原因
WP_queryは自分で新しく条件を指定するので、何も指定しなければ全ての投稿を取得する
このため、カテゴリーやタグで絞り込んでも、全ての投稿が表示される
解決方法
archive.php、tag.phpを作成。
カテゴリースラッグや、タグIDを取得して条件に追加して、WP_queryを使用する
-
ページネーションが動かない
1 2 3 4 5 6 |
<?php /* ページャーの表示 */ if ( function_exists( 'pagination' ) ) : pagination( $bottom_query->max_num_pages, $paged ); //$wp_query ではなく $bottom_query なことに注意! endif; ?> |
問題点
ページネーションが表示されない
原因
最新1件をskipする方法に「offset」を使用するとpegedが取得されない
解決方法
post__not_inを使用して、スキップする
問題点
記事数とページネーションの数が合わない
原因
max_num_pagesが取得されていない
解決方法
get_query_var(‘paged’)を使用して、max_num_pagesを取得する
補足
通常はこれで解決するが、自分は横着な人間なのでやらかしました。
通常動作確認はダミーデータをある程度入れておき、確認します。
ですが、自分は5件だけ投稿を入力し、「’posts_per_page’ => 1」を使ってページネーションの動作を確認しようとしました。
案の定、2ページ目は404。
ここで非常に詰まりました。
もうググってググって数時間。
一旦休憩挟んで、さらにググる。
原因は、Wordpressの表示件数をデフォルトの10件のままにしていたから。
どうやら、WP_queryを使用しても、ページネーションはWPの表示件数設定を優先するみたい。
posts_per_pageの数値とWPの表示件数設定を一致させたらあっさりと解決。
今回は凝ったデザインを、アーカイブページにまで適用させたが為に、勉強となりました。
通常のloop文であれば、カテゴリーやタグの取得、記事のスキップなどは簡単に実装できるはずです。
まあ今後同じ様な現象が発生しても、対処できるかなと思います。
今後も定期的にコーディング実務で詰まった内容をアップしていきます。
では良きコーディングライフを!