0

0

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

心靈之曲

心靈之曲

发布时间:2025-11-28 13:15:21

|

237人浏览过

|

来源于php中文网

原创

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

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

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

在WooCommerce Bookings插件的实际应用中,尤其当产品以天为单位进行预订时,系统默认在订单摘要、我的账户页面以及邮件通知中显示预订的“开始日期”和“结束日期”。然而,对于许多用户和管理员而言,直接显示“开始日期”和“预订时长”更为直观和实用,能够有效避免混淆。例如,客户预订了3天,看到“开始日期:2023年10月26日,结束日期:2023年10月28日”可能不如“开始日期:2023年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插件在多个地方显示预订详情,您可能需要根据实际需求修改一个或多个模板文件:

Pebblely
Pebblely

AI产品图精美背景添加

下载
  • 我的账户页面: 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 对象提供了获取时长的方法。

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

<?php
// 假设您已经在一个循环中获取到了 $booking 对象
// $booking 是 WC_Booking 类的实例

if ( $booking && is_a( $booking, 'WC_Booking' ) ) {
    // 获取开始日期
    $start_date_formatted = date_i18n( wc_date_format(), $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 '<p><strong>开始日期:</strong> ' . esc_html( $start_date_formatted ) . '</p>';
    echo '<p><strong>预订时长:</strong> ' . esc_html( $duration ) . ' ' . esc_html( $translated_duration_unit ) . '</p>';

    // 您可以根据需要移除或注释掉显示结束日期的原有代码
    // 例如:
    // echo '<p><strong>结束日期:</strong> ' . date_i18n( wc_date_format(), $booking->get_end_date( 'timestamp' ) ) . '</p>';
}
?>

**

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

678

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

645

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1108

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1082

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

187

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

90

2025.08.07

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

0

2026.03.03

热门下载

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

精品课程

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

共137课时 | 12.8万人学习

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

共6课时 | 11.3万人学习

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

共13课时 | 1.0万人学习

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

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