WooCommerce Backorder通知问题:仅在商品信息页显示通知
解决WooCommerce预售标记仅在商品页显示的问题
嘿,我来帮你搞定这个WooCommerce的预售显示问题!你遇到的情况是默认设置下,预售标记不仅出现在商品页,还会跟着订单跑到确认页、邮件和PDF发票里,这确实有点烦人。下面给你几个具体的解决办法,都是通过代码钩子来调整,不会影响商品页的正常显示:
1. 移除订单确认页和通知邮件里的「backorderer: 1」标记
WooCommerce默认会把预售相关的元数据输出到订单的商品项里,我们可以通过过滤订单项的元数据来去掉这个标记。把下面的代码添加到你的子主题functions.php文件,或者用Code Snippets插件来管理:
add_filter( 'woocommerce_display_item_meta', 'remove_backorder_meta_from_order_items', 10, 3 ); function remove_backorder_meta_from_order_items( $html, $item, $args ) { // 只针对订单里的商品项,保留购物车/商品页的显示 if ( ! is_cart() && ! is_product() && $item->is_type('line_item') ) { $new_html = ''; // 遍历所有元数据,跳过backorderer项 foreach ( $item->get_formatted_meta_data() as $meta_id => $meta ) { if ( $meta->key !== 'backorderer' ) { $new_html .= $args['before'] . wp_kses_post( $meta->display_key . ': ' . $meta->display_value ) . $args['after']; } } return $new_html; } // 购物车和商品页保持原显示 return $html; }
这段代码的作用是:检查当前页面不是购物车也不是商品页时,过滤掉订单项里key为backorderer的元数据,这样订单确认页和邮件里就不会显示这个标记了。
2. 移除PDF发票里的预售标记
如果你用的是常用的「WooCommerce PDF Invoices & Packing Slips」插件,可以用它专属的钩子来过滤元数据。添加下面的代码:
add_filter( 'wpo_wcpdf_order_item_meta', 'remove_backorder_meta_from_pdf_invoices', 10, 3 ); function remove_backorder_meta_from_pdf_invoices( $meta_data, $order_item, $order ) { // 过滤掉backorderer的元数据 $filtered_meta = array_filter( $meta_data, function( $meta ) { return $meta['key'] !== 'backorderer'; }); return $filtered_meta; }
要是你用的是其他PDF发票插件,核心思路一样:找到插件提供的订单项元数据过滤钩子,然后移除backorderer相关的内容就行,具体可以看对应插件的文档。
注意事项
- 不要直接修改主题的
functions.php,最好用子主题或者Code Snippets插件,避免主题更新后代码丢失。 - 修改代码前记得备份网站,或者在测试环境先测试,确保没问题再放到正式站点。
这样调整后,商品页的「available for backorder」通知会正常显示,而订单相关的其他场景就不会再出现那个多余的「backorderer: 1」啦!
内容的提问来源于stack exchange,提问作者Sined123
相关产品推荐
相关产品推荐

