【WordPress】query_postsをpre_get_postsに置き換え中…他。オリジナルテンプレート作成中の課題

徒然草2.0

WordPressのオリジナルテンプレートで、ごりごりと処理を書いているのですが…個人的な課題メモです。

query_posts関数を使わない方向へ

query_postsはメインループを上書きするので非推奨の関数らしい。query_posts関数はメインループでブログ記事を取得した後にデータを取り直してthe_title関数などで取得できる値を上書きするので、二重にデータ取得処理をしていることになる…というわけでpre_get_postsに置き換えているんだけど、思った通りに値を取得できずハマっている。ページネーションも動かない。

Global変数の書き込み処理でどれがどのように変わってしまうのか?あとquery取得時のオプション指定で時々思った値が取れないことが多々ある(まったくオプションが反映されている気配がない)時のデバッキング方法が謎。ver_dump関数ではトレーシングがしにくいというか…。この辺の問題を効率よく可視化する必要がある気がする。

カテゴリーというタクソノミーは処理的に扱いづらい→カスタムフィールドにテキスト登録したほうがマシ

カテゴリーをはじめWordPressのDBリレーションの仕組みをあまり分かっていないのですが、カテゴリーがカスタムフィールドと違う点はあくまで別テーブルに参照されるだけだと思っています。ようはカテゴリはwp_termsに、フィールドはwp_postmetaに入るだけで、keyにしてwp_postsのデータを探索したときにどちらが効率的に引っ張ってこれるのか?が良くわかりません。端的にどちらをキーにしてもイコールだと思うようにしています。いい加減ですが(汗)ここが明らかにボトルネックになって表示が遅くなったときに考えればいいかと思っています。

ちなみにカテゴリーとタグの違いはカテゴリーが階層化できるだけで特に大差はない。どちらもマルチプルに設定が可能。ただのこのマルチプルさが厄介であり、階層構造化されたカテゴリーを複数条件指定して一覧に出すのは取得したカテゴリをループさせたりしないといけないのと、カテゴリーそのものに優先順位がないので非常に扱いづらいです。

カテゴリループで取得した条件で絞り込みをするのは画面上に取得したデータだけならばともかく、大量データを扱う際に処理が遅すぎて使い物にならないと思います(実測値を出したわけではありません)。

なので、カテゴリーはあくまで大分類で指定は1個のみ。テンプレート階層を使った場合のcategory-xxx.phpなどでメインループを使うkeyにするにとどめて、より細かい分類はフィールドやタグなどに任せてしまったほうがいいのではないか?と今のところ思っております。

カテゴリーIDの情報をfunction.phpのフックへ渡す方法は?

プラグインなどを使ってサイトを構築している限りにおいてプラグインの管理画面で普通は指定できるようになっていますが、特定カテゴリのみpre_get_postsアクションフックを使うなどして絞り込みたい場合は…直指定することになるかと思います。この場合はどうしても直書きすることにある。このテーマを流用して外でも使えるようにした場合は、後で追加したカテゴリーのカテゴリーIDをfunction.phpの所定の位置に書き込む…というphpコーダじゃない人にはちょっとやりたくない作業が必要になるが、この「ちょっとやりたくない」を管理画面で行わせる最善手がわかりません。

うまくプラグインなんかをいれたりして対応する必要があるのかもしれませんが…特にテンプレート販売して誰もが使えるようなものを目指した場合は、そのテーマ編集用のプラグインを別途追加してもらう(もしくは対象のテーマのfunction.phpが、管理画面から編集できるようにする)工夫が必要だと思う。

以上。

徒然草2.0
スポンサーリンク
シェアする
gomiryoをフォローする
ごみぶろぐ

コメント

タイトルとURLをコピーしました