
在电子商务中,清晰、准确的配送信息对于顾客购买决策至关重要。传统的静态配送信息往往无法满足所有产品的多样化需求,例如某些产品可能“立即有货”并享受快速配送,而另一些则可能需要更长的备货时间。此外,根据库存状态动态显示或隐藏配送信息,也能避免给顾客带来不必要的困惑。本教程将介绍一种灵活的解决方案,允许您根据产品的自定义分类和库存状态,在 WooCommerce 单品页显示定制化的配送预估。
要实现动态配送预估,我们需要在 WooCommerce 的产品页面加载时,获取当前产品的信息,包括其自定义分类和库存状态,然后根据预设的业务逻辑计算并显示配送日期。
WooCommerce 提供了全局的 $product 对象,通过它可以访问当前产品的各种属性,例如 ID、库存状态和所属分类。我们可以使用 wp_get_post_terms() 函数来获取产品所属的自定义分类术语。
在显示配送预估之前,必须检查产品的库存状态。如果产品缺货,显示配送信息可能会误导顾客。$product-youjiankuohaophpcnis_in_stock() 方法可以帮助我们轻松判断产品是否有库存。
配送日期的计算需要考虑当前日期、星期几以及一天中的时间(例如,下午4点前或后下单)。这将影响预计送达日期是明天、后天还是下周。同时,我们还可以计算出今天在特定时间点前还有多少小时可以下单,以提供更具体的引导。
将以下代码添加到您的主题的 functions.php 文件或自定义插件中。请务必根据您的实际情况修改自定义分类法名称、分类 Slug 和时区。
<?php
/**
* WooCommerce 产品配送预估:基于自定义分类和库存状态的动态显示
*/
add_action( 'woocommerce_before_add_to_cart_form', 'custom_delivery_estimate_notice' );
function custom_delivery_estimate_notice() {
global $product;
// 确保在单品页且产品对象有效
if ( ! $product || ! is_product() ) {
return;
}
// --- 配置参数 ---
$custom_taxonomy_name = 'product_availability'; // 替换为您的自定义分类法名称,例如 'product_type'
$available_now_slug = 'available-now'; // 替换为“立即有货”分类的 slug
$target_order_hour = 16; // 每日截单时间(例如 16 代表下午4点)
date_default_timezone_set( 'Europe/Tallinn' ); // 根据您的实际时区设置,例如 'Asia/Shanghai'
// 1. 检查产品库存状态
if ( ! $product->is_in_stock() ) {
return; // 如果缺货,不显示通知
}
// 2. 检查产品是否属于指定的自定义分类
$is_available_now = false;
$terms = wp_get_post_terms( $product->get_id(), $custom_taxonomy_name );
if ( ! is_wp_error( $terms ) && ! empty( $terms ) ) {
foreach ( $terms as $term ) {
if ( $term->slug === $available_now_slug ) {
$is_available_now = true;
break;
}
}
}
if ( ! $is_available_now ) {
return; // 如果不属于“立即有货”分类,不显示通知
}
// 3. 计算配送日期和时间
$current_day_of_week = (int) date( 'N' ); // 1 (Mon) through 7 (Sun)
$current_hour = (int) date( 'H' ); // 00 through 23
$delivery_date_string = '';
$order_by_phrase = ''; // 用于提示顾客何时下单的短语
// 周五、周六、周日下单,下周二送达
if ( $current_day_of_week >= 5 ) { // Friday (5), Saturday (6), Sunday (7)
$delivery_date_string = date( "jS F", strtotime( "next tuesday" ) );
$order_by_phrase = "周一";
}
// 周一至周四,下午截单时间后下单,后天送达
elseif ( $current_hour >= $target_order_hour ) {
$delivery_date_string = date( "jS F", strtotime( "tomorrow + 1 day" ) );
$order_by_phrase = "明天";
}
// 周一至周四,下午截单时间前下单,明天送达
else {
$delivery_date_string = date( "jS F", strtotime( "tomorrow" ) );
$order_by_phrase = "今天";
}
// 4. 组装并显示通知消息
$delivery_message = "预计送达日期:<strong>{$delivery_date_string}</strong>。";
// 计算今天距离截单时间还有多少小时
$hours_left_today = 0;
if ( $current_hour < $target_order_hour ) {
$hours_left_today = $target_order_hour - $current_hour;
}
// 根据条件追加下单提示
// 如果是工作日且在截单时间前,显示“今天还剩X小时可下单”
if ( $current_day_of_week < 5 && $current_hour < $target_order_hour ) {
$delivery_message .= " 如果您在今天接下来的 <strong>{$hours_left_today} 小时内</strong>下单,即可以上就是WooCommerce 产品配送预估:基于自定义分类和库存状态的动态显示教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号