“本文档旨在指导开发者如何在 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 }
代码解释:
- global $product;: 访问 WooCommerce 的全局产品对象,允许我们获取当前产品的信息。
- if ( !$product->is_in_stock() ) { return; }: 首先检查产品是否有库存。如果缺货,函数直接返回,不显示任何交货信息。
- if ( ‘product’ == $product->post_type ): 确保当前页面是产品页面。
- wp_get_post_terms( $product->id, ‘available_now’ ): 获取当前产品 available_now 分类的所有条目。 将 ‘available_now’ 替换为你实际使用的分类名称。
- 错误处理: 检查 $terms 是否为 WP_Error 实例。 如果是,则记录错误。
- 分类判断: 检查 $terms 是否为空,以及第一个条目的别名是否与 ‘available-now’ 相匹配。 将 ‘available-now’ 替换为你实际使用的分类别名。
- 时间计算: 获取当前时间,并计算距离截止时间(4PM)还剩多少小时。
- 交货日期计算: 根据当前日期和时间计算预计交货日期。
- 输出信息: 构建包含预计交货日期和剩余时间的 HTML 信息。
注意事项
- 替换分类名称和别名: 务必将代码中的 ‘available_now’ 和 ‘available-now’ 替换为你实际使用的分类名称和别名。
- 时区设置: 确保 date_default_timezone_set() 设置为正确的时区。
- 错误处理: 建议添加更完善的错误处理机制,例如将错误信息记录到日志文件中。
- 测试: 在生产环境中使用之前,请务必在测试环境中进行充分测试。
- 多分类支持: 如果一个产品可能属于多个分类,你需要修改代码来处理这种情况。 可以使用循环遍历 $terms 数组。
- 自定义格式: 根据你的需求,可以自定义输出信息的格式。
通过以上步骤,你就可以实现在 WooCommerce 商店中,仅针对特定分类下的产品,显示精确的预计交货时间信息。 这将极大地提升用户体验,并帮助用户更好地了解产品的交货时间。
评论(已关闭)
评论已关闭