WordPressでイベント開催情報を作るにあたり、開催日順にソートしたいが、開催日がきまっていないイベントは「未定」とし開催日が決まっているものより上に表示したかった時の覚書。
▼表示イメージ
・未定 イベント名
・2022/05/04 イベント名
・2022/05/03 イベント名
・2022/05/02 イベント名
・2022/05/01 イベント名
■仕様
・WordPressにカスタム投稿タイプ「event」を作る
・Advanced Custom Fieldsで「開催日」のフィールド名『event-day』を作る
・固定ページでイベント開催情報のページを作り、専用テンプレートでゴニョゴニョ書く
1.functions.phpでソートを指定
・開催日が未入力のものが上
・開催日が入力されているものが下(日付が新しいものが上)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php function sort_order( $query, $wp_query ) {     if ( $query === 'wp_postmeta.meta_value+0 DESC' ) {         $query = 'wp_postmeta.meta_value+0 > 0 ASC, ' . $query;     }     remove_filter( 'posts_orderby', 'sort_order' );     return $query; } function my_posts_control( $query ) {     if ( $query->is_post_type_archive( 'event' ) ) {//カスタム投稿タイプを指定         $query->set( 'order', 'DESC' );         $query->set( 'orderby', 'meta_value_num' );         $query->set( 'meta_key', 'event-day' ); //カスタムフィールドのキーを指定         add_filter( 'posts_orderby', 'sort_order', 10, 2 );     } } add_action( 'pre_get_posts', 'my_posts_control' ); ?> | 
2.固定ページ専用テンプレートに書く内容
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?php  $paged = get_query_var('paged') ?: 1; //ページネーションを使いたいなら指定  $args = array(   'paged' => $paged, //ページネーションを使いたいなら指定   'posts_per_page' => 20, //1ページあたりの記事数設定   'post_status' => 'publish', //公開の記事だけ   'post_type' => 'event', //カスタム投稿slag  );  $the_query = new WP_Query( $args );  if ( $the_query->have_posts() ) : ?> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>      <?php      //繰り返し表示したい内容、ここでは記事タイトル      echo get_the_title();      ?> <?php endwhile; ?>   <?php   //プラグイン「wp pagenavi」を設置   wp_pagenavi(array('query' => $the_query));   ?> <?php wp_reset_postdata(); endif; ?> | 
MySQLで数値の昇順の後に空値のレコードが並ぶようにする
 
			

 
				![WordPress […] を消す](https://kosaeru.net/wp-content/uploads/2016/02/wp-3pointleader-150x150.png) 
				 
				 
				 
				 
				 
				 
				