WordPressでは投稿やカスタム投稿を取得する際に WP_Query 等を利用していて、カスタムフィールドに入力した値(例えば価格など)を基準として降順・昇順として並び替えをしたいことがあると思います。
そんな時には WP_Query に渡す配列に orderby => meta_value_num を指定するとうまく並び替えが可能です。
WordPress 5.9.3を使用して検証しています。ソースコードに修正を加える場合はバックアップなどをしてから作業されることをお勧めします。
$args = array(
'post_type' => 'product',
'meta_key' => 'custom_field_price',
'orderby' => array( 'meta_value_num' => 'DESC' ),
)
$query = new WP_Query( $args );
meta_value_num を使うことでカスタムフィールドの値を数字として比較して並び替えが可能となります。
今回の記事作成にあたり、自分でも間違った記述をしていたため覚書です。
以下のように、orderby => meta_value で並び替えを指定していると文字列として比較して並び替えをしますので、意図したように並び替えができないという事態になります。
$args = array(
'post_type' => 'product',
'meta_key' => 'custom_field_price',
'orderby' => array( 'meta_value' => 'DESC' ),
)
$query = new WP_Query( $args );
本来であれば、1600、1200、900、700、500の順で並び替えしてほしいところが、文字列で比較してしていますので1が小さい文字とみなされて一番下に配置されていますね💦
WordPress の WP_Query に渡す配列に orderby => meta_value_num を指定することでカスタムフィールドの値を数値として比較・並び替えをすることができました。
この情報は WordPress の公式ドキュメント(関数リファレンス/WP Query)にも記載されています。
WordPress の事で何か困ったらまずは公式ドキュメントを閲覧すると答えが載っている事が多いですね。
コメント