MAGAZINE

Twitter
Facebook

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件を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文であれば、カテゴリーやタグの取得、記事のスキップなどは簡単に実装できるはずです。
まあ今後同じ様な現象が発生しても、対処できるかなと思います。

今後も定期的にコーディング実務で詰まった内容をアップしていきます。

では良きコーディングライフを!