配送方法ごとに希望配達日時欄の表示/非表示を切り替える


以下は、クラシック購入ページに関する以前の記述です。Checkout Blocksには対応できません。

クリックポストは配達日時指定ができません。ハガキや封書などと同じ扱いです。

当店では宅急便とクリックポストのどちらかを選べますが、希望配達日時欄を表示したり隠したりできませんでした。

つまりクリックポストを選んでも配達日時を設定できてしまっていました。

現在は下記のコードを使ってこの不具合を解消しています。

function my_get_shipping_name( ) {
   $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods');
  
 if( false !== strpos($chosen_shipping_methods[0],'flexible')) {
   WC()->session->set("flexible","true");

  echo '<style>#order_delivery_date_field{display:none;} </style>' ;
  echo '<style>#order_delivery_time_field{display:none;} </style>' ;
  echo '<style>.woocommerce-additional-fields h3{display:none;} </style>' ;
  }

}
add_action("woocommerce_review_order_after_shipping", "my_get_shipping_name");

“flexible”というのは、運賃計算に”Flexible shipping”というプラグインを使っていていることに起因します。
クリックポストを選んだ時に内部的にはflexible_shippingという文字列が使われます。

このコードがやっていることは、クリックポストが選ばれたら希望配達日時の部分を消すCSSを書くということです。woocommerce_review_order_after_shipping がミソで、このフックを使うと、宅急便<->クリックポストの切り替えがうまくいきます。