【WordPress】「krc-cast-manager」でスケジュールに項目を追加してみる

2020年11月17日Wordpress,開発

おはようございます。

昨日に引き続き WordPressネタ。

今日は 以前記事にも書いた krc-cast-manager をちょっとカスタマイズしてみました。

krc-cast-manager については次の記事を見てみてください。

【Wordpress】Lightningテーマで在籍キャスト管理プラグイン「krc-cast-manager」を使ってみる

スポンサーリンク

スケジュールに項目追加

追加後画面

標準だと、キャストのスケジュール画面では早番、遅番、時間のみ登録可能ですが、場合によっては日によって変わる項目が追加でほしいこともあるようです。

ということで項目を追加してみます。

プログラム修正

krc-cast-schedule.js

	var time_popup = '<dd class="time_input"><div class="time_popup"><dl><dt><label for="遅早表記">遅早表記</label></dt><dd><select name="fastslow" class="fastslow"><option value="0">指定無</option><option value="早番">早番</option><option value="中番">中番</option><option value="遅番">遅番</option></select></dd></dl><dl><dt><label for="時間表記">時間表記</label></dt><dd><select name="starttime" class="starttime"><option value="0">指定無</option>';
	time_popup += '<option value="OPEN">OPEN</option>';
	for (var i = 10; i <= 26; i++) {
		time_popup += '<option value="' + ("00" + i).slice(-2) + ':00">' + ("00" + i).slice(-2) + ':00</option>';
		time_popup += '<option value="' + ("00" + i).slice(-2) + ':30">' + ("00" + i).slice(-2) + ':30</option>';
	}
	time_popup += '</select><br>から</dd><dd><select name="endtime" class="endtime"><option value="0">指定無</option>';
	for (var i = 10; i <= 26; i++) {
		time_popup += '<option value="' + ("00" + i).slice(-2) + ':00">' + ("00" + i).slice(-2) + ':00</option>';
		time_popup += '<option value="' + ("00" + i).slice(-2) + ':30">' + ("00" + i).slice(-2) + ':30</option>';
	}
	time_popup += '<option value="LAST">LAST</option></select></dd><dd><label for="最短案内時間">最短案内時間</label>';
	time_popup += '<input class="gtime" type="text" value="" style="width:85px;"/>'
	time_popup += '</dd></dl></div></dd>';

省略

					$jq.each(post_in_sort, function (i, val) {
						$jq('#schedule_cast_in').append('<dl class="schedule_cast ui-sortable-handle" id="item_' + val + '"><dt>' + cast_arr['post_in'][val]['krc_name'] + '</dt><dd><img src="' + cast_arr['post_in'][val]['cast_screens'] + '" width="100" class="cast_photo" /></dd>' + time_popup + '</dl>');
						$jq('#item_' + val).find(".fastslow").val(cast_arr['post_in'][val]['fastslow']);
						$jq('#item_' + val).find(".starttime").val(cast_arr['post_in'][val]['starttime']);
						$jq('#item_' + val).find(".endtime").val(cast_arr['post_in'][val]['endtime']);
						$jq('#item_' + val).find(".gtime").val(cast_arr['post_in'][val]['gtime']);
					});

省略

	$jq("#save-schedule").bind( "click", function() {
		$jq("html, body").animate({ scrollTop: 0 }, "fast");
		//出勤時間データとか何とかしなきゃ
		//この配列回してカスタムしたデータをpostしてポップアップの内容も合わせて送る?
		var post_arr = {};
		$jq.each($jq("#schedule_cast_in").sortable("toArray"), function(i, val) {
			id = val.replace(/item_/g,'');
			//console.log(i);
			post_arr[id] = {
				'fastslow': $jq('#' + val + ' .fastslow').val(),
				'starttime': $jq('#' + val + ' .starttime').val(),
				'endtime': $jq('#' + val + ' .endtime').val(),
				's_order': i,
				'gtime' : $jq('#' + val + ' .gtime').val()
			};
		});
		
		$jq('#krc_schedule_rest').remove();
		$jq.post( ajaxurl, { action:'krc_schedule_update', order: post_arr, day: $jq("#schedule_target_day").val() }, function(data, status) {
			$jq("#ajax-response").html('<div class="message updated fade"><p>スケジュールを変更致しました。</p></div>');
			$jq("#ajax-response div").delay(3000).hide("slow");
		});
	});

1.出勤時間などのリストを作成している箇所

2.データを取得している箇所

3.データを登録している箇所

の3つを修正します。

class-krc-model-schedule.php

	public function preparation_calendar () {
		global $post, $post_id, $wpdb;
		
		
		$day = str_replace("/", "-", $_POST['order']);
		
		$day_schedule = $wpdb->get_var(
			$wpdb->prepare("SELECT work FROM $this->table_name WHERE day = %s AND status = %d", $day, 0)
		);
		$work = unserialize($day_schedule);
		$krc_schedule_in_arr = array();
		$krc_schedule_rest = '';
		if (is_array($work)) {
			$work_id_arr = array_keys($work);
			$args = array(
				'post_type' =>  $this->cast_post_type,
				'post__in' => $work_id_arr, 
				'posts_per_page' => -1,
				'orderby' => 'post__in'
			);
			$the_query = new WP_Query($args);
			while ( $the_query->have_posts() ) : $the_query->the_post();
				$photo = json_decode(post_custom('_cast_screens'));
				$krc_schedule_in_arr[get_the_ID()] = array(
					'krc_name' => (string) esc_html(post_custom('_krc_name')),
					'cast_screens' => (string) esc_url($photo[0]),
					'fastslow' => $work[get_the_ID()]['fastslow'],
					'starttime' => $work[get_the_ID()]['starttime'],
					'endtime' => $work[get_the_ID()]['endtime'],
					's_order' => $work[get_the_ID()]['s_order'],
					'gtime' => $work[get_the_ID()]['gtime'],
				);
			endwhile;
			wp_reset_postdata();
		} else if ($work == "rest") {
			$krc_schedule_rest = "rest";
			$work_id_arr = array();
		} else {
			$work_id_arr = array();
		}
		
		$args = array(
			'sort_column'   =>  'menu_order',
			'post_type'     =>  $this->cast_post_type,
			'posts_per_page' => -1,
			'post__not_in' => $work_id_arr,
			'orderby'        => array(
				'menu_order'    => 'ASC',
				'post_date'     =>  'DESC'
			)
		);
		$the_query = new WP_Query($args);
		$krc_schedule_out_arr = array();
		while ( $the_query->have_posts() ) : $the_query->the_post();
			$photo = json_decode(post_custom('_cast_screens'));
			$krc_schedule_out_arr[get_the_ID()] = array(
				'krc_name' => (string) esc_html(post_custom('_krc_name')),
				'cast_screens' => (string) esc_url($photo[0])
			);
		endwhile;
		wp_reset_postdata();
		
		$return_arr = array(
			'post_in' => $krc_schedule_in_arr,
			'post_not_in' => $krc_schedule_out_arr,
			'rest' => $krc_schedule_rest
		);
		
		echo json_encode($return_arr);
		exit;
		
	}

スケジュール管理画面でカレンダーを選択した際の処理に、新しい項目を追加します。

これだけで、スケジュールページと同じようにシリアライズした項目を参照することができます。

まとめ

プラグインの仕組みとかもまだまだ分からないことも多く結構時間をかけてしまいましたがなんとかやりたいことを実現することができました。

もう少し色々と弄ってみたいと思います。

何かのお役に立てれば。

ではでは。

 

スポンサーリンク


関連するコンテンツ

2020年11月17日Wordpress,開発WordPress,WordPressプラグイン

Posted by doradora