「Japanized for WooCommerce 配達日から定休日の曜日をコードを改造して、力づくで削除する」ことを回避するには

↓のHookを利用したコードもいつまで使い続けられるかわからないので、新しいプラグインを開発しました。

Blocksにも対応して、Japanized for WooCommerceより便利になったと自負しています。

「ものくろぼっくす」さんが、「Japanized for WooCommerce 2.5 配達日から定休日の曜日をコードを改造して、力づくで削除する」という記事を書いておられました。

大いに参考にしましたが、利用できそうなhookが追加されていたので、これを使って「力ずく」=「ソースコードを書き換える」ということを回避してみました。

やっていることは、オリジナルのドロップダウンメニューを消して、新たに作り直すという新たな「力ずく」ですが、バージョンアップの度にオリジナルコードを直接編集するという荒技は回避できます。

add_filter('after_wc4jp_delivery_date', 'my_delivery_date', 20, 2);
function my_delivery_date(array $setting, $start_day){
//オリジナルのメニューを消す
echo "<style>.delivery-date{display:none;}</style>";
$week = array(
	__('Sun', 'woocommerce-for-japan'),
	__('Mon', 'woocommerce-for-japan'),
	__('Tue', 'woocommerce-for-japan'),
	__('Wed', 'woocommerce-for-japan'),
	__('Thr', 'woocommerce-for-japan'),
	__('Fri', 'woocommerce-for-japan'),
	__('Sat', 'woocommerce-for-japan')
	);
//$delivery_start_dayの代わりに$my_delivery_start_dayを作る
$my_delivery_start_day = new DateTime($start_day  );	
//スタイルの複製
echo '<p class="form-row my_delivery-date" id="my_order_delivery_date_field">';
echo '<label for="my_delivery_date" class="">'.__('Preferred delivery date', 'woocommerce-for-japan' ).'</label>';
echo '<select name="wc4jp_delivery_date" class="input-select" id="my_wc4jp_delivery_date">';
if(get_option( 'wc4jp-delivery-date-required' ) != 1){
echo '<option value="0">'.$setting['unspecified-date'].'</option>';
	}
for($i = 0; $i <= $setting['reception-period']; $i++){
$set_display_date = $my_delivery_start_day->format('Y-m-d h:i:s');
$value_date[$i] = get_date_from_gmt($set_display_date, 'Y-m-d');
$display_date[$i] = get_date_from_gmt($set_display_date, __('Y/m/d', 'woocommerce-for-japan' ));
if($setting['day-of-week']){
$week_name = $week[$my_delivery_start_day->format("w")];
$display_date[$i] = $display_date[$i].sprintf(__( '(%s)', 'woocommerce-for-japan' ), $week_name);
}
//「ものくろぼっくす」さんの記事から借用   https://mono96.jp/wordpress/woocommerce/45277/
//Begin 追加コード 194行目 echo '<option value="'.$value_date[$i].'">'.$display_date[$i].'</option>'; を差し替える
//月曜日(=1)を配達日指定から除外
if(!(1 == (int)$my_delivery_start_day->format('w')))  {
// 長期休み スタート 長期休みを配達指定日から除外
if('2022-07-10' > $my_delivery_start_day->format('Y-m-d'))  {
echo '<option value="'.$value_date[$i].'">'.$display_date[$i].'</option>';
}
// 長期休み 終了 長期休みを配達指定日から除外
if('2022-07-15' < $my_delivery_start_day->format('Y-m-d'))  {
echo '<option value="'.$value_date[$i].'">'.$display_date[$i].'</option>';
}
}
//end 追加コード
$my_delivery_start_day->modify('+ 1 day');
}
echo '</select>';
echo '</p>';
}

これをfunctions.phpに追加します。実際には「配達に必要な日数」を考慮した処理を加えて運用しています。