0

0

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

心靈之曲

心靈之曲

发布时间:2025-11-26 12:09:42

|

778人浏览过

|

来源于php中文网

原创

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

本文详细介绍了如何在woocommerce bookings中,将默认显示的预订结束日期替换为更直观的预订时长。针对在购物车、订单详情、邮件及“我的账户”页面中出现的日期显示问题,教程推荐采用覆盖woocommerce bookings模板文件的方法,并提供了具体操作步骤和代码示例,帮助开发者实现灵活的日期显示定制,提升用户体验和管理效率。

在WooCommerce Bookings插件中,当用户预订以天为单位的产品时,系统默认会在多个关键页面(如电子邮件通知、用户“我的账户”页面以及结账后的感谢页面)显示预订的开始日期和结束日期。然而,对于某些业务场景,尤其是按天计费或按时长租赁的服务,直接显示预订的“时长”而非“结束日期”能提供更清晰、更符合用户预期的信息,从而减少混淆并提升用户体验。

虽然可以通过WooCommerce提供的过滤器(如wc_bookings_summary_list_date)来修改或隐藏特定日期显示,但这些过滤器通常只允许对现有日期进行格式化或隐藏,难以直接引入预订时长这一新信息。要彻底实现将结束日期替换为预订时长,并确保在所有相关输出中保持一致性,最健壮和推荐的方法是覆盖WooCommerce Bookings的模板文件

理解WooCommerce Bookings模板覆盖机制

WooCommerce及其扩展插件(如Bookings)都设计了一套灵活的模板系统,允许开发者在不修改插件核心文件的情况下,自定义其输出。这意味着你可以将插件的特定模板文件复制到你的主题(强烈建议使用子主题)中,然后修改这些复制的文件以实现自定义显示逻辑。

当WooCommerce或Bookings需要渲染某个视图时,它会首先检查你的主题目录中是否存在对应的模板文件。如果存在,则使用主题中的文件;否则,使用插件自带的默认模板。

实施步骤:将结束日期替换为预订时长

以下是实现这一目标的分步指南:

1. 识别并复制相关模板文件

首先,你需要确定哪些模板文件负责显示预订日期。对于电子邮件、我的账户页面和感谢页面,通常涉及以下几个核心模板:

  • 订单详情中的预订信息: woocommerce-bookings/templates/order/booking-details.php
  • 我的账户页面中的预订列表/详情: woocommerce-bookings/templates/my-bookings/booking-details.php
  • 电子邮件通知中的预订信息: woocommerce-bookings/templates/emails/customer-booking-details.php (以及其他特定邮件模板,如管理员新订单通知等)

操作步骤:

  1. 通过FTP客户端或文件管理器访问你的网站服务器。
  2. 导航到 wp-content/plugins/woocommerce-bookings/templates/ 目录。
  3. 找到上述提到的模板文件,并将它们复制。
  4. 在你的子主题(例如 your-child-theme/)根目录下创建一个名为 woocommerce-bookings 的新文件夹。
  5. 将复制的模板文件粘贴到 your-child-theme/woocommerce-bookings/ 目录中,保持原有的文件路径结构。例如,booking-details.php 应该放在 your-child-theme/woocommerce-bookings/order/booking-details.php。

2. 修改模板文件以显示预订时长

打开你复制到子主题中的模板文件,查找显示预订结束日期的代码段。这些模板通常会有一个 $booking 对象可用,其中包含了所有预订相关的数据。

示例代码修改(以 booking-details.php 为例):

Veggie AI
Veggie AI

Veggie AI 是一款利用AI技术生成可控视频的在线工具

下载

在模板文件中,你可能会找到类似以下的代码来显示开始日期和结束日期:

get_start() ); ?>
get_end() ); ?>

要将结束日期替换为预订时长,你需要访问 $booking 对象的持续时间信息。WC_Booking 对象通常提供了 get_duration() 和 get_duration_unit() 方法。

找到显示结束日期的行,并将其替换为显示时长的代码。

// 假设 $booking 对象已经可用
// 原始显示:
// echo '预订开始日期: ' . date_i18n( wc_date_format(), $booking->get_start() );
// echo '预订结束日期: ' . date_i18n( wc_date_format(), $booking->get_end() );

// 修改为显示开始日期和预订时长:
echo '预订开始日期: ' . date_i18n( wc_date_format(), $booking->get_start() );

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

// 获取本地化的单位标签
$unit_label = wc_get_duration_unit_label( $duration_unit );

if ( $duration && $unit_label ) {
    echo '
预订时长: ' . esc_html( $duration ) . ' ' . esc_html( $unit_label ); }

代码解释:

  • $booking->get_start(): 获取预订开始时间戳。
  • $booking->get_duration(): 获取预订的持续时间数值。
  • $booking->get_duration_unit(): 获取预订持续时间的单位(例如 'day'、'hour')。
  • wc_get_duration_unit_label(): 这是一个WooCommerce Bookings的辅助函数,用于获取持续时间单位的本地化文本(例如,将 'day' 转换为 '天')。
  • esc_html(): 用于安全输出HTML内容。

重复此过程,修改所有你希望更改显示方式的模板文件。

3. 清除缓存并测试

完成模板修改后,务必清除所有网站缓存(包括主题缓存、插件缓存、CDN缓存等)。然后,进行全面的测试:

  • 提交一个新的预订订单,检查结账后的感谢页面。
  • 登录用户账户,检查“我的账户”页面中的预订详情。
  • 检查发送给客户和管理员的电子邮件通知。

确保所有修改都已生效,并且预订时长显示正确。

注意事项与最佳实践

  • 始终使用子主题: 直接修改父主题或插件文件会在更新时被覆盖。子主题是进行任何自定义的最佳实践。
  • 备份: 在进行任何文件修改之前,务必备份你的网站文件和数据库。
  • 了解模板结构: 在修改模板之前,花时间理解其HTML结构和PHP逻辑,避免引入错误。
  • 兼容性: 插件更新可能会引入新的模板结构或修改现有模板。在WooCommerce Bookings更新后,检查你的自定义模板是否仍然兼容,可能需要根据新版本进行调整。
  • 本地化: 使用 wc_get_duration_unit_label() 等函数确保时长单位能够正确地进行本地化,以适应不同语言的用户。

总结

通过覆盖WooCommerce Bookings的模板文件,你可以完全掌控预订信息的显示方式。这种方法虽然比简单的过滤器更复杂,但它提供了最大的灵活性和稳定性,确保你的自定义显示在插件更新后依然有效。通过将预订结束日期替换为预订时长,你不仅能提升客户体验,还能为网站管理员提供更直观的订单信息,从而优化整体的预订管理流程。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2706

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1667

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1527

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

974

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1444

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1235

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1529

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1307

2023.11.13

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号