WordPressで記事の並び順を2段階に条件を付けて変更する

あまり利用する機会はないかもしれませんが、備忘録のために記録しておきます。

たとえば投稿にカスタムフィールドを2つ、記事番号と注目記事かどうかなど設定していて、通常の順番変更に加えて、カスタムフィールドが注目になっている投稿を一番上に持ってきたいという場合です。

<ul>
<?php 
//基本的な設定
  $args = array(
    'post_type' => 'post',//利用したい投稿タイプを指定
    'posts_per_page' => -1,
    'meta_query' => array(
      'post_number_num' => array(
        'key' => 'post_number',
        'type' => 'NUMERIC',
        'compare' => 'EXISTS'
      )
    ),
    'orderby' => array(
      'post_number_num' => 'ASC'//記事番号の昇順で表示する
    )
  );

  $args_posts = get_posts($args);

//空室を最優先に並び替え処理設定
    $amounts = array();
    foreach ($args_posts as $args_post) {
      setup_postdata($args_post);
      $args_id = $args_post->ID;
      $check_post_number_num = get_post_meta($args_id, "post_number", true);//記事番号のカスタムフィールドを取得
      $check_pickup = get_post_meta($args_id, "check_pickup", true);//注目記事かどうかのカスタムフィールドを取得
      if($check_contracts == '注目記事') { $check_post_number_num = '000'.$check_post_number_num; }//注目記事は記事番号の先頭に000を追加
      else { $check_post_number_num = '900'.$check_post_number_num; }//それ以外は記事番号の先頭に999を追加
      $amounts[] = $check_post_number_num;
    }
    array_multisort($amounts, SORT_ASC, SORT_NUMERIC, $args_posts);//
    //並び替え設定終了

    foreach ($args_posts as $args_post) {
    //表示したい内容を記述します。
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php } ?>
</ul>

参考:[Wordpress]任意の順序で子カテゴリー毎に記事を出力する方法(例は都道府県順でソート)