WooCommerce调用get_price_html()报null错误 自定义古腾堡块故障求助
修复方案
错误原因
报错核心是woocommerce_template_single_price() 依赖WooCommerce全局$product对象,两种场景会触发对象为空的问题:
- Gutenberg编辑器后端渲染区块时,未初始化商品上下文
- 购物车、首页等非商品详情页场景下,全局没有绑定商品对象,你的区块若在这些页面加载就会触发报错
修复代码
替换你现有的价格展示函数为以下版本即可:
function lsc_product_price() { global $product; // 全局无有效商品时,尝试从当前文章ID获取商品对象 if ( ! is_a( $product, 'WC_Product' ) ) { $product = wc_get_product( get_the_ID() ); } // 兜底判断:无有效商品时直接返回空,避免抛出致命错误 if ( ! is_a( $product, 'WC_Product' ) ) { // 可选:编辑器场景下返回占位提示,方便编辑时识别区块 if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { return '<p style="opacity:.6">商品价格(仅前端商品详情页可见)</p>'; } return ''; } ob_start(); woocommerce_template_single_price(); $content = ob_get_contents(); ob_end_clean(); return $content; }
配套优化
- 加购按钮的实现函数添加完全相同的前置对象判断逻辑即可,无需修改其他代码
- 可在注册自定义区块的代码外层添加页面判断,仅在商品详情页加载区块逻辑,进一步降低冲突概率:
if ( is_product() ) { // 此处放置你注册价格、加购按钮区块的代码 }
内容的提问来源于stack exchange,提问作者TanguyG
相关产品推荐
相关产品推荐

