跳到主要内容

ArtinTech Solution

Extending the WooCommerce Order Preview Popup with Live Status Editing

WooCommerce 的订单列表有一个快速预览弹窗:点击任意一行的眼睛图标,就会弹出窗口,显示账单信息、配送信息和订单商品。它确实很有用,但默认是只读的:要修改状态或查看订单备注,仍然得离开弹窗,打开完整的订单编辑页面。

用正确的方式扩展核心

我们没有覆盖 WooCommerce 的弹窗模板(那样在下次 WooCommerce 更新时就会出问题),而是使用了它本身就提供的两个官方扩展点:woocommerce_admin_order_preview_get_order_details 过滤器,可以向弹窗接收的数据中注入额外内容;以及 woocommerce_admin_order_preview_end,一个在弹窗 Underscore.js 模板末尾触发的动作,可以追加能访问同一份数据的标记。

结合这两个钩子,我们加入了:

  • 一个带保存按钮的状态下拉框,连接到一个小型 AJAX 处理程序,它会更新订单,而且关键的是,也会更新列表中对应的行,而不只是弹窗,这样关闭弹窗后列表就不会显示过时的状态。
  • 一个可滚动的订单内部备注列表,通过 wc_get_order_notes() 获取,按最新在前显示,与完整订单页面上的顺序完全一致。
  • 另一篇文章中介绍的 WhatsApp 快递转发按钮,也放在同一个弹窗里。

让它看起来像原生功能

最难的不是功能本身,而是足够贴近 WooCommerce 自身的视觉节奏,让新增内容看起来不像是硬贴上去的。我们沿用了 WooCommerce 在“Billing details”面板中已经使用的内边距、标题样式和间距,而不是为这一个弹窗另起一套视觉语言。结果看起来就像弹窗本身的延伸,而不是某个插件作者钉在下面的附加物。

要点总结

  • WooCommerce 为这个弹窗提供官方钩子,正是为了让你不必覆盖它的模板;使用这些钩子能让定制在更新后依然安全。
  • 后台的 AJAX 更新需要同步所有显示该数据的位置,而不只是用户操作的那个控件,否则界面会在不知不觉中变得过时。
  • 与平台自身组件保持视觉一致,是真正的设计决策,而不是锦上添花;正是它让定制功能显得可信。

相关阅读:控制手机上显示哪些列、下单后更换商品规格。

在您自己的 WooCommerce 或 WordPress 后台遇到类似限制?和我们聊聊:ArtinTech Solution 正是打造这类定制店铺工具的团队。

Share this article

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注