meta_queryで「'compare' => 'BETWEEN'」のときは順番が重要

meta_queryには「BETWEEN」というオプションがありますが、このときに渡すvalueは昇順の配列でないといけない、ということを先日知りました。

具体的には、以下のように降順で渡した配列ではBETWEENは動作しません。

配列を生成するときに数値の大小を意識するか、asort関数で昇順にしてから渡すといいでしょう。

AD

おまけ:なぜ順番を考慮してくれないのか

wp-includes/meta.php というファイルの1400行目あたりでmeta_queryの挙動を定義しているのですが、以下のようなコードになっています。

与えられた配列から先頭2つを取り出し、 BETWEEN 1000 AND 2000 というSQL文を生成しています。
BETWEENは順番が影響しますので、ちゃんと昇順でないと動かない、というわけです。

しかしここはWordPress側がソートしてよしなにやってほしい感じがしないでもないですね(;´∀`)

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

コメントはまだありません。