はなゐろぐ

主に技術関係の覚え書きです。

Wordpressカスタムフィールドに入力した値でクエリを絞り込んだりソートしたりする

2019年10月31日

日付

開始日(schedule_start)と終了日(schedule_end)の間に今日($today)が入っていれば記事を取得する。ちなみに、今回はサブフィールドをキーに指定するので、フィールド(schedule)とサブフィールド(start)をアンスコでつないで「schedule_start」にします。

$today = date('Ymd');
$query = new WP_Query([
  // 中略
  'meta_query' => array(
    'relation' => 'AND',
    [
      'key' => 'schedule_start',
      'compare' => '<=',
      'value' => $today,
      'type' => 'DATE'
    ],
    [
      'key' => 'schedule_end',
      'compare' => '>=',
      'value' => $today,
      'type' => 'DATE'
    ]
  )
]);

数値

金額(price)順にソートして取得する。カスタムフィールドをキーにソートするには'orderby' => 'meta_value'を使います。しかしこのままだと値が文字列として扱われ期待通りにソートされないので、'orderby' => 'meta_value_num'にします。

$query = new WP_Query([
  // 中略
  'orderby' => 'meta_value_num', // _num をつけることで数値としてソートされる
  'meta_key' => 'price',
  'order' => 'ASC',
  'meta_query' => [
    'relation' => 'AND',
    [
      'key' => 'price',
      'compare' => 'EXISTS',
    ]
  ]
]);