日々一歩ずつ このブログでは、勉強になったことや躓いたこと、役立つことなどを雑多に書いていきます。

公開日
更新日

pre_get_postsでちょっと嵌ったこと

自分でオリジナルテンプレートを作る際に必要なクエリの書き換え。

私はよく”WP_Query”を使ってクエリの書き換えを行っていたのですが、ネットで調べてみるとどうも”pre_get_posts”を使ったほうが良いということで。

調べてみたら便利そうなので実際に使ってみたら、ちょっと嵌ってしまいました。

今回は”pre_get_posts”が便利な理由と、私が嵌ったことについて備忘録を兼ねて書いてみたいと思います。

 

問い合わせが一度ですむ!見やすくなる

”pre_get_posts”が便利な理由については、わたしが説明するよりも下記サイトのほうがわかりやすく説明されているので、ここでは要点だけ説明します。(間違っていたらすみません。。。)

【wordpress】pre_get_postsを使ってみませんか?

  • これまでのクエリ書き換え関数(get_posts(),WP_Queryなど)は、メインクエリの後、その関数が読み込まれるたびに問い合わせを行っている。つまり、この関数を一ページに何度も使えば使うほど、問い合わせ回数が増える。→動作速度の低下
  • 可読性、保守性が悪くなる
  • ”pre_get_posts”はアクションフックなので、メインクエリの実行前に呼び出すのでメインクエリとして実行できる
  • functions.phpにまとめてかける

といったような利点があります。

functions.phpにまとめられればコードが見やすくなりますので、あとから調整したいときに便利です。

なのでできる限り”pre_get_posts”にしてみたいなーと思ったのですが。。。

固定ページは難しいようです

私が作っていたサイトでは、フロントページを固定ページにして、フロントページの内容を固定ページから自由に書き換えられるようにしたかったんです。

さらにフロントページには、人気記事一覧を載せようと思っていて、その人気記事の順番や記事数をいじるのに早速”pre_get_posts”を使ってみたのですが。

うまく反映されませんでした。きっとわたしの書き方がおかしいのかなぁと思っていたのですが、見直してもおかしいところがわからず。

それで色々調べたら、どうやら固定ページでは難しいようです。

WordPressでホームやアーカイブ毎に表示条件を変える(is_main_query と pre_get_posts フック)

↑のサイトのページ下のほうで、私と同じようなことをコメント欄で質問されているのですが、その回答を見てわかりました。

固定ページでは、メインクエリーは固定ページの情報になる!

考えてみればそうですよね。”pre_get_posts”ならなんでもできちゃうんだみたいに勝手に考えてました。

そんなこんなで原因がわかったのですが、もしかしたら他にうまく書く方法があるのかもしれませんが、とれあえず固定ページは従来どおりに書けばいいのかなぁと。

あまり参考にならないかもしれませんが、是非”pre_get_posts”は試してみてください。

  • ブログランキング・にほんブログ村へ
  • このエントリーをはてなブックマークに追加

関連記事

サイトについて

管理人

勉強になったことや躓いたこと、役立つことなどを雑多に書いていきます。
サイト構築やマーケティングの勉強がてら作ってみたサイトなので、そういった記事が多くなるかもしれません。

カテゴリー

上へ