WordPress WP_Queryの post__in で指定順に結果を得たいときは・・・
この記事の所要時間: 25

タイトルの通りなのだが
WordPressの検索結果を得たいときに使う
WP_Query で post__in を使う場合が少なからずある。
例えば記事オブジェクトでpost_id をリストにしていてそれを表示したいときなど。
・・・あるか??まぁ、あるのだ。
その際に post__in にそのまま記事post_idリストを post__in に指定すると

WordPressのWP_Queryで post__in を利用するとき指定した順番に出したい!

例えば
10, 3, 59, 1
という順序に出てほしいのに
1, 3, 10, 59
のようにID順になってしまう。
これは orderby を指定すべきなんだな・・・ってことで
よくある menu_order かな?ってテキトーにやってみる・・・。
変わらん!!!
じゃあなに???
無指定か??
やっぱり変わらん。
あえて無指定の「none」ってのもあるらしい。
それを指定してもやっぱりダメ。
無指定だと date つまり記事の作成日降順になってしまう。
デフォルト値ってやつですね。

解決した!!

で、解決方法を探ったら・・・ stackoverflow(英語)に答えがあった。
情報源: wordpress – WP_Query with an array of IDs order by array – Stack Overflow
こちらで後述のような記載が。

In WordPress 3.5 and up you can use ‘orderby’=>’post__in’ then you must write this:


$myarray = $ids;
$args = array('post__in'=> $myarray, 'orderby'=>'post__in');
// The Query
$the_query = new WP_Query( $args );

なーるほど!!!
要するに orderby にも post__in を指定してあげれば良いということですね。
今回の調査で none と post__in が orderby に使用できるということがわかった。
・・・それにしても none は初期設定になるからいらんのじゃないか??と思ったけど、すでに設定されているときに上書きのように使うのかな・・・ということで心の片隅にしまっておく(笑)

この記事が気に入ったら
いいね ! しよう

Twitter で