ホームページ制作、ネットショップ開業・運用、SNS運用など、インターネットに関する事業支援を致します

[WordPress] カスタムフィールドの数字で並び替えをするにはmeta_value_numを使う

更新日
2022年7月13日
作成日
2022年5月12日

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_num' => 'DESC' ),
)
$query = new WP_Query( $args );

本来であれば、1600、1200、900、700、500の順で並び替えしてほしいところが、文字列で比較してしていますので1が小さい文字とみなされて一番下に配置されていますね💦

WordPressのWP_Queryに渡す配列にorderby => meta_value_numを指定することでカスタムフィールドの値を数値として比較・並び替えをすることができました。

この情報はWordPressの公式ドキュメント(関数リファレンス/WP Query)にも記載されています。WordPressの事で何か困ったらまずは公式ドキュメントを閲覧すると答えが載っている事が多いですね。

  • なんでも相談

    ICTよろず相談所は、ホームページ制作、ネットショップ開業・運用、ブログ運用、SNS運用などインターネットに関する事業支援を行なっております。

    どんな些細な疑問や質問でも気軽にお問い合せ下さい。