WordPress的functions.php中Woocommerce相关PHP代码报错,无法定位问题求排查
问题定位
你提供的报错截图指向的是JS语法错误,结合代码排查问题如下:
- 核心错误:jQuery代码段中的变量声明不符合语法规范,
var p = 'p.price'行末尾缺少逗号,导致q变量的声明逻辑断裂,浏览器解析JS时直接抛出语法错误。 - 潜在问题:未对价格标签的初始内容做判空处理,部分主题下如果商品详情页不存在
.price类的p标签,会导致后续赋值逻辑报错。
修复后完整代码
<?php function iconic_format_price_range( $price, $from, $to ) { return sprintf( '%s: %s', __( 'from', 'iconic' ), wc_price( $from ) ); } add_filter( 'woocommerce_format_price_range', 'iconic_format_price_range', 10, 3 ); // 移除可变产品的默认价格区间 remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); add_action('woocommerce_before_add_to_cart_form', 'selected_variation_price_replace_variable_price_range'); function selected_variation_price_replace_variable_price_range(){ global $product; if( $product->is_type('variable') ): ?><style> .woocommerce-variation-price {display:none;} </style> <script> jQuery(function($) { var p = 'p.price', // 修复:补全变量声明末尾的逗号 q = $(p).length ? $(p).html() : ''; // 修复:增加标签存在性判断,避免空值报错 $('form.cart').on('show_variation', function( event, data ) { if ( data.price_html && $(p).length ) { $(p).html(data.price_html); } }).on('hide_variation', function( event ) { $(p).html(q); }); }); </script> endif; }
额外优化建议
- 建议将
<style>标签内的样式规则迁移到主题自带的自定义CSS面板或style.css文件中,避免PHP文件硬编码样式,后续调整更方便 - 如果你的主题价格标签不是
p.price的结构,可以把选择器替换为当前主题实际使用的价格标签选择器
内容的提问来源于stack exchange,提问作者Vexagon
相关产品推荐
相关产品推荐

