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

在 woocommerce 特定分类的产品中显示预计交货时间

“本文档旨在指导开发者如何在 WooCommerce 商店中,针对特定分类(taxonomy)下的产品,显示预计交货时间。我们将修改现有的代码,使其仅在指定分类的产品页面上显示交货信息,并根据订单时间动态调整交货日期,同时处理缺货情况,提供更精确的预计交货时间提示。”

针对特定分类显示预计交货时间

为了仅在特定分类的产品页面上显示预计交货时间,我们需要利用 WooCommerce 的全局 $product 对象来获取当前产品的分类信息。以下是如何修改代码以实现此目的:

add_action( 'woocommerce_before_add_to_cart_form', 'delivery_estimate' );

function delivery_estimate() {

   global $product;

   // 检查产品是否有库存
   if ( !$product->is_in_stock() ) {
        return; // 如果缺货,则不显示交货信息
   }

   if ( 'product' == $product->post_type ) { // 确保是产品页面

       $terms = wp_get_post_terms( $product->id, 'available_now' ); // 将 'available_now' 替换为你实际的分类名称

       if ( $terms instanceof WP_Error ) {
           // 处理错误,例如记录日志
           error_log( '获取分类信息时出错: ' . $terms->get_error_message() );

       } elseif ( ! empty( $terms ) ) {

           $term = $terms[ 0 ]; // 假设产品只属于一个分类

           if ( 'available-now' == $term->slug ) { // 将 'available-now' 替换为你实际的分类别名

               date_default_timezone_set( 'Europe/Tallinn' );  

               // 获取当前时间
               $current_hour = date('H');
               $end_of_day_hour = 16; // 4PM

               // 计算剩余时间 (小时)
               $hours_left = $end_of_day_hour - $current_hour;
               if ($hours_left < 0) {
                   $hours_left = 0;
               }

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

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

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

               // 构建输出信息
               $html = "<br><div class='woocommerce-message' style='clear:both'>Ready for delivery between {$start_del_day} & {$end_del_day} when you order within {$hours_left} hours.</div>";

               echo $html;

            } // endif

        } // endif

    } // endif

}
登录后复制

代码解释:

Latte

Latte

发现视频中最吸引人的部分并制作

Latte93


查看详情
Latte

  1. global $product;: 访问 WooCommerce 的全局产品对象,允许我们获取当前产品的信息。
  2. if ( !$product->is_in_stock() ) { return; }: 首先检查产品是否有库存。如果缺货,函数直接返回,不显示任何交货信息。
  3. if ( ‘product’ == $product->post_type ): 确保当前页面是产品页面。
  4. wp_get_post_terms( $product->id, ‘available_now’ ): 获取当前产品 available_now 分类的所有条目。 将 ‘available_now’ 替换为你实际使用的分类名称。
  5. 错误处理: 检查 $terms 是否为 WP_Error 实例。 如果是,则记录错误。
  6. 分类判断: 检查 $terms 是否为空,以及第一个条目的别名是否与 ‘available-now’ 相匹配。 将 ‘available-now’ 替换为你实际使用的分类别名。
  7. 时间计算: 获取当前时间,并计算距离截止时间(4PM)还剩多少小时。
  8. 交货日期计算: 根据当前日期和时间计算预计交货日期。
  9. 输出信息: 构建包含预计交货日期和剩余时间的 HTML 信息。

注意事项

  • 替换分类名称和别名: 务必将代码中的 ‘available_now’ 和 ‘available-now’ 替换为你实际使用的分类名称和别名。
  • 时区设置: 确保 date_default_timezone_set() 设置为正确的时区。
  • 错误处理: 建议添加更完善的错误处理机制,例如将错误信息记录到日志文件中。
  • 测试: 在生产环境中使用之前,请务必在测试环境中进行充分测试。
  • 多分类支持: 如果一个产品可能属于多个分类,你需要修改代码来处理这种情况。 可以使用循环遍历 $terms 数组。
  • 自定义格式: 根据你的需求,可以自定义输出信息的格式。

通过以上步骤,你就可以实现在 WooCommerce 商店中,仅针对特定分类下的产品,显示精确的预计交货时间信息。 这将极大地提升用户体验,并帮助用户更好地了解产品的交货时间。

以上就是在 WooCommerce 特定分类的产品中显示预计交货时间的详细内容,更多请关注php中文网其它相关文章!

相关标签:

https://www.php.cn/faq/1503654.html

发表回复

Your email address will not be published. Required fields are marked *