如何阻止自定义钩子在WooCommerce订单邮件通知中运行
WooCommerce禁止分类内容在订单邮件中显示的解决方案
你当前使用的woocommerce_order_item_meta_end钩子会同时在前端订单页面(订单收到页、我的账户订单详情页)和订单通知邮件场景下触发,这是内容同时出现在两个位置的核心原因。可以通过以下两种方式实现需求:
方案1:修改原有函数,新增场景判断(改动最小,推荐)
直接在原有函数开头增加邮件场景检测,检测到是邮件场景时直接终止输出即可,同时修复原代码末尾多余的语法错误右大括号,修改后的完整代码如下:
// 展示订单项对应商品分类和分类ID add_action( 'woocommerce_order_item_meta_end', 'display_custom_data_in_emails', 10, 4 ); function display_custom_data_in_emails( $item_id, $item, $order, $bool ) { // 检测是邮件场景则直接返回不输出 if ( wc_is_email() ) { return; } // 获取对应商品的分类信息 $terms = wp_get_post_terms( $item->get_product_id(), 'product_cat', array( 'fields' => 'names' ) ); $term_ids = wp_get_post_terms( $item->get_product_id(), 'product_cat', array('fields' => 'ids') ); // 输出逗号分隔的分类名称、分类ID echo "<br><small>" . implode(', ', $terms) . "</small>"; echo "<br><small>" . implode(', ', $term_ids) . "</small>"; }
方案2:更换触发钩子,仅绑定前端页面
如果你只需要在订单收到页(Thank You页) 显示分类内容,不需要在我的账户的历史订单详情里显示,也可以将绑定的钩子更换为仅在订单收到页触发的对应钩子,不过该方案适配场景更窄,通用性不如方案1。
内容的提问来源于stack exchange,提问作者typhoon
相关产品推荐
相关产品推荐

