如何移除WooCommerce邮件通知中订单详情的商品SKU
移除WooCommerce邮件通知中商品标题后的SKU
你的代码之所以没用,是因为它只针对前端商品详情页的SKU显示控制,和邮件通知完全不搭边。要去掉邮件里的SKU,得用专门针对订单/邮件商品名称的钩子,或者修改邮件模板,下面是两种可行方案:
方案一:用过滤器钩子(推荐,无需修改模板)
添加以下代码到主题的functions.php文件里,或者用自定义代码插件:
function remove_sku_from_email_order_item_name( $item_name, $item ) { // 仅在邮件环境生效,排除后台和前端订单详情页 if ( ! is_wc_endpoint_url() && ! is_admin() ) { $product = $item->get_product(); if ( $product && $product->get_sku() ) { // 匹配邮件里SKU的格式,默认是"(SKU编码)",如果你的格式不同请调整 $sku_suffix = ' (' . $product->get_sku() . ')'; $item_name = str_replace( $sku_suffix, '', $item_name ); } } return $item_name; } add_filter( 'woocommerce_order_item_name', 'remove_sku_from_email_order_item_name', 10, 2 );
这个钩子会拦截订单商品名称的输出,判断当前是邮件场景后,自动去掉SKU后缀。如果你的邮件里SKU不是用括号包裹,比如是[SKU123],就把$sku_suffix改成对应的格式就行。
方案二:修改邮件模板(适合钩子失效的情况)
如果上面的钩子没用,可能是主题或其他插件改写了邮件模板,这时候可以直接修改模板文件:
- 找到WooCommerce插件目录下的模板:
wp-content/plugins/woocommerce/templates/emails/email-order-items.php - 把这个文件复制到你的主题目录下:
wp-content/themes/你的主题名/woocommerce/emails/(没有对应文件夹就新建) - 打开复制后的
email-order-items.php,找到类似下面的代码段:
echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', $item->get_name(), $item, false ) ); if ( $show_sku && $product->get_sku() ) { echo wp_kses_post( ' (#' . $product->get_sku() . ')' ); }
- 删掉SKU相关的代码,也就是去掉
if ( $show_sku && $product->get_sku() ) { ... }这段,保存即可。
注意:修改模板后,后续WooCommerce更新不会覆盖你主题里的模板,但如果官方模板有大改动,你可能需要同步更新自己的模板。
内容的提问来源于stack exchange,提问作者udd_ish
相关产品推荐
相关产品推荐

