全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

定制WooCommerce预订显示:将结束日期替换为预订时长

本教程旨在解决woocommerce bookings插件中默认显示预订开始日期和结束日期,而非预订时长的问题。我们将探讨如何通过覆盖woocommerce bookings模板文件这一核心方法,在购物车、我的账户页面及订单邮件中,将预订的结束日期替换为更直观的预订时长,从而提升用户和管理员的体验,并提供具体的实现思路和最佳实践。

引言:优化WooCommerce预订日期显示体验

在WooCommerce Bookings插件的实际应用中,尤其当产品以天为单位进行预订时,系统默认在订单摘要、我的账户页面以及邮件通知中显示预订的“开始日期”和“结束日期”。然而,对于许多用户和管理员而言,直接显示“开始日期”和“预订时长”更为直观和实用,能够有效避免混淆。例如,客户预订了3天,看到“开始日期:2025年10月26日,结束日期:2025年10月28日”可能不如“开始日期:2025年10月26日,预订时长:3天”清晰明了。本教程将指导您如何通过WooCommerce推荐的方式,实现这一显示优化。

理解WooCommerce预订日期显示机制与现有尝试

WooCommerce Bookings插件在不同的页面和通知中,通过其内部逻辑和模板文件来渲染预订产品的详细信息。默认情况下,它倾向于展示完整的日期范围。

有开发者尝试通过WordPress的过滤器(如wc_bookings_summary_list_date)来干预日期显示。例如,以下代码可以隐藏结束日期,只显示开始日期:

function modify_summary_date_20170821( $booking_date, $booking_start, $booking_end ) {
    echo 'Ankunft: '; // 可自定义前缀,如“Arrival:”
    return date_i18n( wc_date_format(), $booking_start );
}       
add_filter( 'wc_bookings_summary_list_date', 'modify_summary_date_20170821', 10, 3 );

这段代码确实能够阻止结束日期被显示,并允许自定义开始日期的前缀。然而,这个过滤器仅提供了$booking_date(通常是开始日期)、$booking_start和$booking_end作为参数。它无法直接提供预订时长的信息,也无法在现有参数的基础上轻松计算并插入时长,因为其设计目的主要是修改日期字符串本身,而非添加新的数据字段或改变整体结构。因此,要实现将结束日期替换为预订时长,我们需要更深层次的定制方法。

核心解决方案:通过模板覆盖定制显示

WooCommerce及其扩展插件(包括Bookings)都提供了强大的模板覆盖机制,允许开发者在不修改插件核心文件的情况下,自定义插件的输出内容。这是实现将结束日期替换为预订时长的最推荐和最灵活的方法。

为什么选择模板覆盖?

  1. 最大灵活性: 直接控制HTML结构和PHP逻辑,可以精确地调整显示内容和样式。
  2. 未来兼容性: 您的修改位于子主题中,插件更新时不会被覆盖。
  3. 直接访问数据: 在模板文件中,您可以直接访问到完整的预订对象(WC_Booking),从而获取其所有属性,包括开始日期、结束日期、时长和时长单位等。

识别相关模板文件

WooCommerce Bookings插件在多个地方显示预订详情,您可能需要根据实际需求修改一个或多个模板文件:

  • 我的账户页面: woocommerce-bookings/templates/myaccount/bookings.php 或其包含的其他模板。
  • 订单详情页(后台及前端): woocommerce-bookings/templates/order/booking-details.php。
  • 邮件通知: woocommerce-bookings/templates/emails/customer-booking-details.php (发给客户的邮件) 和 woocommerce-bookings/templates/emails/admin-new-booking.php (发给管理员的邮件)。
  • 购物车/结账页面: 某些情况下可能涉及 woocommerce-bookings/templates/cart/cart-item-booking.php 或类似文件。

您可以在 wp-content/plugins/woocommerce-bookings/templates/ 目录下找到所有原始模板文件。

模板覆盖步骤

  1. 创建子主题(如果尚未创建): 模板覆盖必须在子主题中进行,以确保插件更新后您的修改不会丢失。
  2. 复制模板文件:
    • 在您的子主题目录中,创建一个名为 woocommerce-bookings 的文件夹。
    • 将您需要修改的原始模板文件(例如,myaccount/bookings.php)从 wp-content/plugins/woocommerce-bookings/templates/ 复制到您的子主题的 woocommerce-bookings/ 文件夹中,并保持原有的子目录结构。
      • 例如,如果您要修改 myaccount/bookings.php,则复制到 your-child-theme/woocommerce-bookings/myaccount/bookings.php。
  3. 修改模板文件以显示时长:
    • 打开复制到子主题的模板文件。
    • 在这些模板中,您会发现用于显示预订详情的代码,通常会有一个 $booking 变量,它是一个 WC_Booking 类的实例。
    • 找到显示开始日期和结束日期的代码段。例如,您可能会看到类似 echo $booking->get_start_date(); 和 echo $booking->get_end_date(); 的代码。
    • 将显示结束日期的代码替换为显示预订时长的代码。WC_Booking 对象提供了获取时长的方法。

以下是一个概念性的代码示例,展示如何在模板中获取并显示预订时长:

get_start_date( 'timestamp' ) );

    // 获取预订时长和单位
    $duration = $booking->get_duration();
    $duration_unit = $booking->get_duration_unit(); // 例如 'day', 'hour', 'minute'

    // 根据单位进行本地化显示,例如将 'day' 显示为 '天'
    $translated_duration_unit = '';
    switch ( $duration_unit ) {
        case 'day':
            $translated_duration_unit = __( '天', 'your-text-domain' ); // 替换 'your-text-domain' 为您主题或插件的文本域
            break;
        case 'hour':
            $translated_duration_unit = __( '小时', 'your-text-domain' );
            break;
        case 'minute':
            $translated_duration_unit = __( '分钟', 'your-text-domain' );
            break;
        default:
            $translated_duration_unit = $duration_unit;
            break;
    }

    // 输出开始日期和预订时长
    echo '

开始日期: ' . esc_html( $start_date_formatted ) . '

'; echo '

预订时长: ' . esc_html( $duration ) . ' ' . esc_html( $translated_duration_unit ) . '

'; // 您可以根据需要移除或注释掉显示结束日期的原有代码 // 例如: // echo '

结束日期: ' . date_i18n( wc_date_format(), $booking->get_end_date( 'timestamp' ) ) . '

'; } ?>

**


# php  # word  # html  # 前端  # wordpress  # ai  # switch  # 本地化  # 为什么  # echo  # 字符串  # 对象 


相关文章: 如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何配置支付宝与微信支付功能?  如何在宝塔面板创建新站点?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在建站主机中优化服务器配置?  Java解压缩zip - 解压缩多个文件或文件夹实例  如何确保西部建站助手FTP传输的安全性?  ,在苏州找工作,上哪个网站比较好?  实例解析Array和String方法  如何快速搭建高效香港服务器网站?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  网站制作公司排行榜,抖音怎样做个人官方网站  建站OpenVZ教程与优化策略:配置指南与性能提升  ,制作一个手机app网站要多少钱?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何在阿里云高效完成企业建站全流程?  微信推文制作网站有哪些,怎么做微信推文,急?  内网网站制作软件,内网的网站如何发布到外网?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  创业网站制作流程,创业网站可靠吗?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何在IIS服务器上快速部署高效网站?  建站之星2.7模板快速切换与批量管理功能操作指南  建站之星安装后如何配置SEO及设计样式?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  PHP正则匹配日期和时间(时间戳转换)的实例代码  建站主机如何选?高性价比方案全解析  如何做静态网页,sublimetext3.0制作静态网页?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  建站主机无法访问?如何排查域名与服务器问题  设计网站制作公司有哪些,制作网页教程?  高防服务器租用指南:配置选择与快速部署攻略  如何快速配置高效服务器建站软件?  如何确保FTP站点访问权限与数据传输安全?  如何通过万网虚拟主机快速搭建网站?  完全自定义免费建站平台:主题模板在线生成一站式服务  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  建站主机选虚拟主机还是云服务器更好?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何通过智能用户系统一键生成高效建站方案?  如何选择高效响应式自助建站源码系统?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在IIS管理器中快速创建并配置网站?  高端建站如何打造兼具美学与转化的品牌官网?  如何在局域网内绑定自建网站域名?  建站之星后台管理如何实现高效配置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。