如何不修改WooCommerce核心,为update_order_review静态函数添加自定义代码?
解决方案
完全无需修改WooCommerce核心代码,直接使用官方提供的woocommerce_update_order_review_fragments过滤器钩子即可实现你的需求。
实现步骤
- 将以下代码添加到你的WordPress主题的
functions.php文件,或者你的自定义功能插件的代码文件中:
add_filter('woocommerce_update_order_review_fragments', 'custom_add_cart_fragment_to_checkout_update'); function custom_add_cart_fragment_to_checkout_update($fragments) { // 生成自定义购物车模块的HTML片段 ob_start(); woocommerce_order_cart(); $cart_fragment = ob_get_clean(); // 配置需要更新的DOM选择器与对应片段 $fragments['.woocommerce-cart-form__contents'] = $cart_fragment; return $fragments; }
- 确认前端你新增的购物车模块外层CSS类与代码中的
.woocommerce-cart-form__contents完全匹配,WooCommerce收到AJAX响应后会自动替换对应节点的内容。
补充说明
你此前自己在update_checkout事件中写AJAX拿不到最新数据,是因为你的请求触发时机早于WooCommerce默认的地址更新、购物车重算逻辑。上述过滤器的触发时机是在update_order_review方法完成购物车运费、总额重算,组装好默认返回片段之后、发送AJAX响应之前,此时拿到的所有购物车、地址数据都是最新的,完全可以替代你修改核心代码添加的自定义逻辑,不会受WooCommerce版本升级影响,也不需要你额外写AJAX调用逻辑,复用WooCommerce默认的结账更新请求即可完成自定义购物车模块的刷新。
内容的提问来源于stack exchange,提问作者Gamernamer
相关产品推荐
相关产品推荐

