get_posts時にmeta_valueで並び替え、その2

その1はこちらです。

今回はデータベースに格納されている友達の並び替えをします。 あるmeta keyに「最後に会った日付」を格納していて、その日付が古い人から順に並べたいケースについて考えます。

しかしmeta valueは不完全でたまに値が格納されていない人がいたとします。

その場合は、その人から順番に並べて、そのあとmeta valueに日付が格納されていてそれが古い人から順番に並べなければなりません。

(普通に値が古い日から順番に並べるだけでは、空の値が入っている人は最後に並んでしまします。)

以下がget_postに渡す$argsです。

    $args_owner = array(
      'post_type' => 'friends',
      'posts_per_page' => "100",
      'paged' => "1",
      'order'   => "ASC", //古い順
      'orderby' => "no_visit last_visit", //先にno visit、次にlast_visit
      'meta_query' => array(
        'relation' => 'OR',
        'no_visit' => array(
          'key' => 'last_visit_date',
          'compare' => 'NOT EXISTS', //値が入ってない人を指定
        ),
        'last_visit' => array(
          'key' => 'last_visit_date', //値が入ってる人を指定
        ),
      ),
      'fields' => 'ids',
    );

友達は大切にしましょう