ACFで1月分のスケジュール

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

とある施設の上演スケジュールをACFで作るという案件。投稿タイプはスケジュールとプログラムでスケジュールは1投稿で1月分。
タイトルとスラッグは年月で必ず半角数字でないといけないので、数値フィールドで年と月、

function my_post_title_updater( $post_id ) {
    $my_post = array();
    $my_post['ID'] = $post_id;
	if ( get_post_type() == 'schedule') {
		$my_post['post_title'] = get_field('year')."年".get_field('month')."月";
	} 
    wp_update_post( $my_post );
  }
  add_action('acf/save_post', 'my_post_title_updater', 20);

function my_acf_update_value( $value, $post_id, $field ) {
	if(get_post_type( $post_id ) == 'schedule') { $month = get_field('month');
    $value = get_field('year').sprintf('%02d', $month); }
    return $value;
}
add_filter('acf/update_value/name=slug', 'my_acf_update_value', 10, 3);

function custom_post_title( $value, $post_id, $field  )
{
$type = get_post_type($post->ID);
if ( 'schedule' == $type ) {
		if(isset($value) && $value != '') {
			 $args = array(
				 'ID'           => $post_id,
				 'post_name' => sanitize_title($value)
			 );
			 wp_update_post( $args );
		}
    return $value;
} }
add_filter('acf/update_value/name=slug', 'custom_post_title', 10, 3);

として、(*こちら参照)トップページで「今日」のスケジュールを取得する際はスラッグから「今日」を含む月の投稿を取得。

スケジュール用の繰り返しフィールドは予め31日分デフォルト値を設定(*こちら参照)
プログラムの選択は、投稿オブジェクトのほうがコードは楽だが、選択時に検索やタームの絞り込みができる関連フィールドを利用。

スケジュールの日付部分に関して、
スラッグ用のフィールドから年月$ym を取得、$date1 = get_sub_field(‘date’); で日付を取得、$date2 = $ym.sprintf(‘%02d’, $date1); で年月日を取得、$date3 = date(‘w’, strtotime($date2)); で日本語表記に変換するための曜日を取得、$date4 = date(‘l’, strtotime($date2)); でクラスに英字で入れるための曜日を取得。$date3 は$week = [ ‘日’, ‘月’, ‘火’, ‘水’, ‘木’, ‘金’, ‘土’,]; echo $week[$date3]; のように。

トップページでの当日分の取得に関して、
$ym = date(‘Ym’); $pid = $wpdb->get_var(“SELECT ID FROM $wpdb->posts WHERE post_name = $ym”); で当月分の投稿IDを取得して投稿IDからフィールドを取得、当日の日付とイコールの行から内容を取得という順。

2024.2 追記:
acf 年月から1月分のフィールドを自動で作成する関数acf 年月から1月分のフィールドを自動で作成する関数2 参照

その他のAdvanced Custom Fields に関する記事一覧

Advanced Custom Fields に関する記事一覧ページへ