KUHAKU
no
MEMOCHO

WP_Queryを使い倒そう【マスター編 ⑤】順序・ページ送り・権限・キャッシュ・戻り値

WP_Queryを使い倒そう【マスター編 ⑤】順序・ページ送り・権限・キャッシュ・戻り値のサムネイル

どうも、KUHAKUです。

今回で最後になるWP_Queryのマスター編ですが、今までは取得する投稿の絞り込みに関するパラメータを見てきましたが、ラストは取得した記事の表示方法についてのパラメータを見ていきたいと思います。

今まで見てきたパラメータで取得した記事を実際にどのように表示していくのかがマスターできれば大手情報サイトにも負けにようなサイト構築が可能になります。

ぐるなびやSUUMOなどの情報系サイト等も元をたどればページを投稿するという点で見ればワードプレスの標準で実装されている機能と何ら変わりはないのでここをマスターすれば大規模なポータルサイトの構築がワードプレスで実現できるというわけです。

実際には記事数が多くなりすぎるとサイトの表示速度が重くなってしまうワードプレスですが、そこらへんもいろいろ対策をすれば何とかなります。笑

これまでのシリーズはコチラ
↓↓

パラメータの設定

今回見ていくのは取得した投稿の表示順序やページ送り等に関するパラメータで、絞り込み系のパラメータに比べると大変シンプルで簡単なものになっていますので、実際に使用する場合は当記事の下部でご紹介するソースコードのコピペで何とかなるかと思います。

順序のパラメータ

WP_Queryでは取得してきた投稿をどのような順序で表示するのかもパラメータで設定できます。
パラメータは2つのみなのでいたって単純です。
これを使用することによって更新日順で並び替えたり、カスタムフィールドの値によって並び替えたりすることでできます。

こちらのパラメータ達は指定できる値も決まっているのでとても簡単に覚えられます。

order

このパラメータで指定できる値は’ASC’か’DESC’の二つで、デフォルトは’DESC’です。
orderbyで指定した値を元に昇順もしくは降順で並び替えることができます。’ASC’が昇順で’DESC’は降順。

例)記事の一覧を投稿日が古いものから順に並び替える

orderbyを指定しない場合にはデフォルトで投稿日による並び替えになります。

orderby

orderbyパラメータは何を基準に並び替えるかを指定する項目です。
指定できる項目は’none’ ‘ID’ ‘author’ ‘title’ ‘name’ ‘date’ ‘modified’ ‘parent’ ‘rand’ ‘comment_count’ ‘menu_order’ ‘meta_value’ ‘meta_value_num’ ‘title menu_order’ ‘post__in’です。

指定できる値については一気にコードで見ていきましょう。

ここで注意するべきなのが、meta_valueもしくはmeta_value_numを指定した場合にはカスタムフィールドのパラメータであるmeta_keyの指定が必須になるので注意。

また、orderbyは複数でも指定ができます。

例)投稿日で並び替えて同一投稿日のものは更新日順に並び替える

また、orderと組み合わせて配列ですることも可能です。

例)カスタムフィールド「price」の値で昇順に、priceの値が同一の場合は投稿日の降順で並び替える

いたって単純ですね。
複数のカスタムフィールドで並び替えをする場合は少々複雑なので後述の実践的使い方でご紹介します。

ページ送りのパラメータ

こちらのパラメータでは1ページに表示する件数やページの設定等が指定できます。

少しばかり文字での説明がややこしいものがありますがめげずに解説を付けていこうと思います。

nopaging

ページ送りを無効にするかどうかを指定できます。デフォルトはfalseです。
この項目をtrueにするとページングが無効になります。

カンタンすぎる内容なので例題はすっ飛ばします。

posts_per_pageとposts_per_archive_page

これらのパラメータは1ページに表示する投稿の件数を指定できます。

posts_per_archive_pageは、表示するページがis_archiveかis_searchの時にposts_per_pageを上書きします。
なので両方していていても問題はありません。

全投稿を1ページに表示したい場合は「-1」を指定すれば全ての投稿を表示できます。

例)1ページに20件の記事を表示する

offset

offsetパラメータでは何件目から取得するのかを指定できます。

例えば、サイドバーなどで最新の投稿を5件だけ表示していて、続きを見るページでは6件目から表示したい場合などは下記のようなコードになります。

このパラメータでの注意事項としては、offsetを指定すると後述のpagedパラメータを無視するため、ページ送りができないようになってしまいます。
その他に、posts_per_pageで-1を指定するとoffsetは無視されます。

pagedとpage

これらのパラメータでは、表示するページ数を指定できます。
通常は指定不要ですが、固定ページなどで投稿の一覧を表示する際などにはpagedを指定しないとページングがうまくいきません

pageは固定フロントページで使用する場合に指定するものです。

例)3ページ目に表示されるであろう記事を表示する。

固定ページで投稿の一覧を表示する際のpagedの指定は後程ご紹介します。

ignore_sticky_posts

このパラメータは先頭固定表示を無視するかどうかを指定できます。デフォルトはfalseです。
この項目もいたって簡単なので例題はすっ飛ばします。

以上でページ送りのパラメータは終了になります。
これにて一通りのパラメータを見たのでおそらく自由に投稿の一覧を表示できるようになっているかと思います。

この後は、ほとんど使わないが便利なパラメータをご紹介していきます。

権限のパラメータ

権限のパラメータは一つしかありません。

perm

このパラメータは、ユーザーが適切な権限を持つ場合に投稿ステータスを参照して一覧に表示するものを設定するパラメータです。
指定できる値は’readable’または’editable’の二つです。

例えば、ユーザーが読む権限を持っている場合に公開済みと非公開の投稿を表示するには下記のようなコードになります。

編集権限を持つ投稿を表示する場合は’editable’を指定すればOKです。

キャッシュのパラメータ

投稿データをキャッシュに追加するかどうかを指定できるパラメータになります。

キャッシュはSEO的にもいいものなので通常はデフォルトのままでいいと思いますが、何か特別な場合には使用が可能です。

デフォルトではすべてtrueに指定されています。

cache_resultsは投稿自体、update_post_meta_cacheはカスタムフィールド等のpost_meta、update_post_term_cacheはカテゴリーやタグなどのタームがキャッシュされるかどうかを指定できます。

先程も言いましたがこれらの項目は特別な事情がない限り指定しなくてもいいです。

戻り値のパラメータ

通常、ワードプレスではループをした際に、戻り値は投稿のオブジェクトの配列が返されます。

そのため、ループ中に$postを参照すると投稿のIDや投稿者、カテゴリーなど様々な情報が取得できますが、使い方によっては投稿のIDのみが欲しいときなどもあるかもしれません。
そんなときに使用できるのがこのパラメータです。

fieldsパラメータで指定できる値は’ids’ ‘id=>parent’の二つです。
その他を指定するとデフォルトの投稿オブジェクトの配列が返されます。

‘ids’は投稿IDの配列を、’id=>parent’は親IDと投稿IDの連想配列が返されます。

以上でWP_Queryの全てのパラメータを記述しました。
もうこれでWP_Queryを自由自在に操れるようになったかと思います。

上記を用いた実践的使い方

それでは上記で説明したパラメータのうち、後程説明するといった使用方法についてコードを用いて説明していきたいと思います。

複数のカスタムフィールドでの並び替え

先述のorderbyパラメータでカスタムフィールドで並び替える際はmeta_valueを指定し、参照する項目をmeta_keyで指定すると記述しましたが、複数のカスタムフィールドの値で並び替える場合はどのようにすればいいのかを実際のソースコードと共に見ていきます。

今回の例として、カスタムフィールドの「price」キーの値で昇順、「evaluation」キーの値で降順に並び替えるコードを見ていきます。

上から見ていくとmeta_queryの記述方法が前回やったものと少し異なる記述になっています。
5行目と9行目でmeta_queryの子配列にそれぞれキーを指定し、orderbyでそのキーの値を指定しています。

このような記述をすることにより複数のカスタムフィールドでの並び替えが可能になります。

固定ページで投稿のページ送りを実装する

さて、もう一つは固定ページで投稿の一覧を表示したい場合などにページ送りを実装する方法になります。

pagedパラメータに何も指定せずにページ送りをしてしまうと、固定ページのページ送りのみが実行されるので、固定ページで表示している投稿の一覧はページングがうまく効きません。

そのため、固定ページで投稿一覧のページ送りを実装する場合には現在のページ数を取得し、pagedパラメータに渡してあげる必要があります。

カンタンですね!
show_page_number()で現在のページ数を取得し、その値をpagedパラメータに設定してあげるだけです。

以上、これでWP_Queryのパラメータについてもうわからないことはないんじゃないでしょうか>

ようやく長々と続けてきたマスター編はラストになります。

次回、最後に全てのパラメータをまとめたコードスニペットを記載してこのシリーズを終了にします。

それではまた!

FB Comment