
本教程详细指导如何在WooCommerce产品页面上,根据自定义分类(如“现货”)和库存状态动态显示预计送达日期。内容涵盖获取产品分类信息、判断库存状态、计算基于下单截止时间的送达日期范围,并生成自定义的提示信息,以提升用户体验。
引言
在电子商务中,清晰明确的送达时间预估对于提升用户信任和转化率至关重要。默认的woocommerce设置可能无法满足所有复杂的业务需求,例如根据特定产品属性(如“现货”)或库存状态来动态调整送达提示。本教程将深入探讨如何通过代码定制,在woocommerce产品详情页上实现这一高级功能,确保只有符合条件的产品才显示定制化的送达预估,并且信息精准、专业。
核心需求分析
为了实现更智能的送达预估功能,我们将解决以下三个主要需求:
基于自定义分类显示: 仅针对具有特定自定义分类(例如“现货”或“Available now”)的产品显示送达预估信息。定制化输出信息: 生成包含送达日期范围和下单倒计时的动态提示,例如:“预计送达日期:4月15日 至 4月16日。今日16:00前下单,还剩 X 小时 Y 分钟下单。”缺货时隐藏提示: 当产品处于缺货状态时,自动隐藏送达预估信息,避免误导用户。
技术实现基础
要实现上述功能,我们将主要利用WooCommerce和WordPress提供的以下核心功能:
WooCommerce Hook woocommerce_before_add_to_cart_form: 这是在“添加到购物车”按钮上方插入自定义内容的标准动作钩子,非常适合显示送达预估信息。全局产品对象 global $product: 在WooCommerce产品页面中,可以通过 global $product 访问当前产品的详细信息,包括其ID、库存状态和所属分类。WordPress函数 wp_get_post_terms(): 用于获取指定文章(产品)所属的某个分类法(taxonomy)的所有术语(terms)。
分步实现指南
我们将逐步构建一个PHP函数,并将其挂载到WooCommerce的相应钩子上。
步骤一:识别目标产品与分类
首先,我们需要获取当前产品对象,并检查它是否属于我们指定的自定义分类。
// 定义自定义分类法和术语的别名(slug),便于维护define( 'CUSTOM_DELIVERY_TAXONOMY', 'product_status' ); // 替换为你的自定义分类法别名define( 'AVAILABLE_NOW_TERM_SLUG', 'available-now' ); // 替换为你的“现货”分类术语别名add_action( 'woocommerce_before_add_to_cart_form', 'custom_delivery_estimate' );function custom_delivery_estimate() { global $product; // 确保当前是产品页面,并且产品对象有效 if ( ! is_product() || ! $product ) { return; } // 检查产品是否具有指定的自定义分类 $terms = wp_get_post_terms( $product->get_id(), CUSTOM_DELIVERY_TAXONOMY ); // 错误处理或如果未找到任何术语,则退出 if ( is_wp_error( $terms ) || empty( $terms ) ) { return; } $is_available_now = false; foreach ( $terms as $term ) { if ( $term->slug === AVAILABLE_NOW_TERM_SLUG ) { $is_available_now = true; break; } } // 如果产品不属于“现货”分类,则不显示预估 if ( ! $is_available_now ) { return; } // 后续逻辑将在此处添加}
步骤二:检查产品库存状态
在显示送达预估之前,必须确保产品有库存。如果产品缺货,则不应显示任何送达信息。
// ... (上一步的代码) // 如果产品不属于“现货”分类,则不显示预估 if ( ! $is_available_now ) { return; } // 检查产品库存状态,如果缺货则不显示 if ( ! $product->is_in_stock() ) { return; } // 后续逻辑将在此处添加
步骤三:动态计算送达日期与下单时间
这是最复杂的部分,我们需要根据当前的日期和时间来计算送达日期范围,并确定用户需要在何时下单才能享受此预估。
// ... (上一步的代码) // 设置时区,确保日期计算准确 date_default_timezone_set( 'Europe/Tallinn' ); // 根据您的实际位置调整时区 $current_hour = (int) date( 'H' ); $current_minute = (int) date( 'i' ); $cutoff_hour = 16; // 下单截止时间为16:00 (4 PM) $order_by_message = ''; $delivery_start_timestamp = 0; $delivery_end_timestamp = 0; // 计算距离下单截止时间剩余的小时和分钟 if ( $current_hour 0 ) { $hours_left--; $minutes_left = 60 - $current_minute; } $order_by_message = "今日16:00前下单,还剩 " . ($hours_left > 0 ? $hours_left . " 小时 " : "") . ($minutes_left > 0 ? $minutes_left . " 分钟" : "") . " 下单"; if ( $hours_left <= 0 && $minutes_left 0 ) { $hours_until_tomorrow_cutoff--; } $order_by_message = "明日16:00前下单,还剩 " . ($hours_until_tomorrow_cutoff > 0 ? $hours_until_tomorrow_cutoff . " 小时 " : "") . ($minutes_until_tomorrow_cutoff > 0 ? $minutes_until_tomorrow_cutoff . " 分钟" : "") . " 下单"; if ( $hours_until_tomorrow_cutoff <= 0 && $minutes_until_tomorrow_cutoff = 5 ) { // 周五 (5), 周六 (6), 周日 (7) // 周末下单,最早下周二送达 $delivery_start_timestamp = strtotime( "next tuesday" ); } elseif ( $current_hour >= $cutoff_hour ) { // 周一至周四,已过16:00 // 今天16:00后下单,最早后天送达 $delivery_start_timestamp = strtotime( "tomorrow + 1 day" ); } else { // 周一至周四,16:00前 // 今天16:00前下单,最早明天送达 $delivery_start_timestamp = strtotime( "tomorrow" ); } // 定义一个2天的送达窗口 $delivery_end_timestamp = strtotime( "+1 day", $delivery_start_timestamp ); $delivery_start_date_formatted = date( "n月j日", $delivery_start_timestamp ); $delivery_end_date_formatted = date( "n月j日", $delivery_end_timestamp ); // 后续逻辑将在此处添加
步骤四:构建并显示自定义提示信息
最后,将所有计算出的信息整合到一个HTML字符串中,并使用WooCommerce的样式类进行显示。
// ... (上一步的代码) $html = "
"; echo $html;}
完整代码示例
将以上所有步骤整合到您的主题 functions.php 文件或自定义插件中。
<?php// 定义自定义分类法和术语的别名(slug),便于维护// 请根据您的实际设置进行修改define( 'CUSTOM_DELIVERY_TAXONOMY', 'product_status' ); // 您的自定义分类法别名define( 'AVAILABLE_NOW_TERM_SLUG', 'available-now' ); // 您的“现货”分类术语别名add_action( 'woocommerce_before_add_to_cart_form', 'custom_delivery_estimate' );
以上就是WooCommerce产品页面:基于自定义分类和库存状态显示动态预计送达日期的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1272776.html
微信扫一扫
支付宝扫一扫