如何编辑WooCommerce中woocommerce_cart_collaterals钩子输出的HTML内容
关于WooCommerce
woocommerce_cart_collaterals 钩子的修改指南 1. 钩子的引用来源
woocommerce_cart_collaterals是WooCommerce核心自带的购物车页面专用钩子,你提供的代码注释中已经标注了默认挂载的两个回调函数:
woocommerce_cross_sell_display:负责输出购物车页的交叉销售商品区块woocommerce_cart_totals:优先级为10,负责输出购物车小计、运费、总计等结算金额区块
两个回调对应的源码位置在WooCommerce插件目录的includes/wc-cart-functions.php文件中,关联的默认模板文件分别为:
- 交叉销售模块:
templates/cart/cross-sells.php - 购物车金额模块:
templates/cart/cart-totals.php
注意:所有自定义修改建议在子主题下操作,避免主题/插件升级后自定义内容被覆盖。
2. 获取并编辑该区域HTML的常用方法
方法1:覆写WooCommerce模板文件(最推荐,适合大范围修改结构)
WooCommerce自带模板覆写机制,修改不会影响核心源码,升级也不会丢失:
- 进入站点目录
wp-content/plugins/woocommerce/templates/cart/,找到需要修改的对应模板文件(比如cart-totals.php或cross-sells.php) - 将目标模板文件复制到当前使用主题的
woocommerce/cart/目录下(如果没有对应目录可以手动新建) - 直接编辑复制后的文件内的HTML和PHP逻辑即可,WooCommerce会优先加载主题内的覆写模板
方法2:替换默认回调函数(适合完全重构内容的场景)
在主题的functions.php文件中添加如下代码,移除默认挂载的函数后替换为自定义输出:
// 移除默认挂载的回调 remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' ); remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cart_totals', 10 ); // 挂载自定义输出函数 add_action( 'woocommerce_cart_collaterals', 'custom_cart_collaterals_output', 10 ); function custom_cart_collaterals_output() { // 在此处编写自定义HTML和逻辑代码即可 echo '<div class="custom-cart-total">自定义购物车区块内容</div>'; // 也可以按需调用原生模板,比如 wc_get_template( 'cart/cart-totals.php' ); }
方法3:在原有内容前后插入自定义内容(适合小范围调整)
如果不需要改动原有输出结构,只需要在默认内容前后加自定义HTML,可以通过调整回调优先级实现:
// 优先级小于10,内容会插入到默认区块之前 add_action( 'woocommerce_cart_collaterals', 'custom_content_before_collaterals', 5 ); function custom_content_before_collaterals() { echo '<div class="before-content">插入到购物车金额上方的自定义内容</div>'; } // 优先级大于10,内容会插入到默认区块之后 add_action( 'woocommerce_cart_collaterals', 'custom_content_after_collaterals', 15 ); function custom_content_after_collaterals() { echo '<div class="after-content">插入到购物车金额下方的自定义内容</div>'; }
3. 直接获取该区域完整HTML的方法
如果需要临时捕获输出的HTML字符串做二次处理,可以借助PHP输出缓冲区实现:
ob_start(); do_action( 'woocommerce_cart_collaterals' ); $cart_collaterals_html = ob_get_clean(); // 变量$cart_collaterals_html就是该区域的完整HTML代码,可以做字符串替换等处理后再输出 echo $cart_collaterals_html;
内容的提问来源于stack exchange,提问作者Karue Benson Karue
相关产品推荐
相关产品推荐

