在 WooCommerce 中显示 select 分类中产品的预计交货时间

Show Estimated Delivery for Products in select Taxonomy in WooCommerce

我目前正在使用下面的代码片段在我的单个产品页面上显示预计送达时间。我需要帮助对代码进行一些更改;

  1. 我目前有一个自定义分类 (现在可用) 并且想 修改代码以仅显示具有该分类的产品

  2. 更改输出通知以显示例如。 (准备在 4 11 月和 11 月 7 日,当您在 [一天结束前剩余的小时数] 内订购时。)

  3. 隐藏商品缺货[=33=时的通知]


add_action( 'woocommerce_before_add_to_cart_form', 'delivery_estimate' );
    
function delivery_estimate() {
   date_default_timezone_set( 'Europe/Tallinn' );  
    
   // if FRI/SAT/SUN delivery will be MON
   if ( date( 'N' ) >= 5 ) {
      $del_day = date( "l jS F", strtotime( "next tuesday" ) );
      $order_by = "Monday";
   } 
    
   // if MON/THU after 4PM delivery will be day after tomorrow
   elseif ( date( 'H' ) >= 16 ) {
      $del_day = date( "l jS F", strtotime( "tomorrow + 1 day" ) );
      $order_by = "tomorrow";
   } 
    
   // if MON/THU before 4PM delivery will be TOMORROW
   else {
      $del_day = date( "2 jS F", strtotime( "tomorrow" ) );
      $order_by = "today";
   }
 
   $html = "<br><div class='woocommerce-message' style='clear:both'>Order by 4PM {$order_by} for delivery on {$del_day}</div>";
    
   echo $html;
}

如果您使用 WooCommerce 的 global $product,您可以获得当前产品的分类术语。然后您应该能够显示正确的消息。

您的代码将如下所示:

add_action( 'woocommerce_before_add_to_cart_form', 'delivery_estimate' );

function delivery_estimate() {

   global $product;

   if ( 'YOUR_POST_TYPE' == $product->post_type ) {

       $terms = wp_get_post_terms( $product->id, 'YOUR_TAXONOMY_NAME' );

       if ( $terms instanceof WP_Error ) {
           // Log error here or whatever you need to do

       } elseif ( ! empty( $terms ) ) {

           $term = $terms[ 0 ]; // assuming it is single-valued

           if ( 'YOUR_AVAILABLE_NOW_SLUG' == $term->slug ) {

               date_default_timezone_set( 'Europe/Tallinn' );  

               // if FRI/SAT/SUN delivery will be MON
               if ( date( 'N' ) >= 5 ) {
                  $del_day = date( "l jS F", strtotime( "next tuesday" ) );
                  $order_by = "Monday";
               } 

               // if MON/THU after 4PM delivery will be day after tomorrow
               elseif ( date( 'H' ) >= 16 ) {
                  $del_day = date( "l jS F", strtotime( "tomorrow + 1 day" ) );
                  $order_by = "tomorrow";
               } 

               // if MON/THU before 4PM delivery will be TOMORROW
               else {
                  $del_day = date( "2 jS F", strtotime( "tomorrow" ) );
                  $order_by = "today";
               }

               $html = "<br><div class='woocommerce-message' style='clear:both'>Order by 4PM {$order_by} for delivery on {$del_day}</div>";

               echo $html;

        } // endif

    } // endif

}
add_action( 'woocommerce_before_add_to_cart_form', 'delivery_estimate' );

function delivery_estimate() {

   global $product;

   if ( 'product' == $product->post_type ) {

       $terms = wp_get_post_terms( $product->id, 'shipment-status' );

       if ( $terms instanceof WP_Error ) {
           // Log error here or whatever you need to do

       } elseif ( ! empty( $terms ) ) {

           $term = $terms[ 0 ]; // assuming it is single-valued

           if ( 'available-in-ghana' == $term->slug ) {

               date_default_timezone_set( 'Africa/Accra' );  

               // if FRI/SAT/SUN delivery will be between +1 & +4 days
               if ( date( 'N' ) >= 5 ) {
                  $del_day = date( "j M", strtotime( "today + 1 day" ) );
                  $del_day2 = date( "j M", strtotime( "today + 4 day" ) );
                  $hour = gmdate("g", strtotime("tomorrow") - time()) . hrs;
                  $minutes = gmdate("i", strtotime("tomorrow") - time()) . mins;
                
                } 

               // if MON/THU after 4PM delivery will be day after tomorrow
               elseif ( date( 'H' ) >= 16 ) {
                  $del_day = date( "j M", strtotime( "tomorrow + 1 day" ) );
                  $hour = gmdate("g", strtotime("tomorrow") - time()) . hrs;
                  $minutes = gmdate("i", strtotime("tomorrow") - time()) . mins;
               } 

               // if MON/THU before 4PM delivery will be TOMORROW
               else {
                  $del_day = date( "j M", strtotime( "tomorrow" ) );
                  $hour = gmdate("g", strtotime("tomorrow") - time()) . hrs;
                  $minutes = gmdate("i", strtotime("tomorrow") - time()) . mins;
               }

               $html = "<br><div class='woocommerce-message' style='clear:both'>Order within the next $hour $minutes for delivery between {$del_day} & {$del_day2}</div>";

               echo $html;

        } // endif

    } // endif

}}

输出