WordPress WP_Queryの post__in で指定順に結果を得たいときは・・・
Pocket

タイトルの通りなのだが
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 は初期設定になるからいらんのじゃないか??と思ったけど、すでに設定されているときに上書きのように使うのかな・・・ということで心の片隅にしまっておく(笑)

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