WooCommerce面料商店订购提示文本格式修改技术求助
WooCommerce面料商店提示文本格式修改方案
以下是修改后的完整代码,可直接替换原代码实现你需要的格式「添加1单位,对应0.5米(£6.25 对应0.5米)」,且所有数值会随订购数量动态更新:
add_action( 'woocommerce_before_add_to_cart_quantity', 'display_product_total_amount_html' ); function display_product_total_amount_html() { global $product; if( ! has_term( array('fabric'), 'product_cat', $product->get_id() ) ) return; $metres_per_qty = 0.5; $display_price = wc_get_price_to_display($product); $initial_qty = 1; $initial_metres = $metres_per_qty * $initial_qty; $initial_price = $display_price * $initial_qty; // 格式化价格和文本,适配新的显示格式 $price_string = sprintf( __('添加%s单位,对应%s米(%s 对应%s米)', 'woocommerce'), '<span class="qty-units">' . $initial_qty . '</span>', '<span class="qty-metres">' . $initial_metres . '</span>', '<span class="price-amount">' . number_format($initial_price, 2) . '</span>', '<span class="price-metres">' . $initial_metres . '</span>' ); // 输出提示容器 echo '<div class="total-price_qty" style="margin-bottom:20px;">'.$price_string.'</div>' ?> <script> jQuery(function($){ const baseMetres = <?php echo $metres_per_qty; ?>; const basePrice = <?php echo $display_price; ?>; $('input[name=quantity]').on( 'input change', function(){ const qty = parseInt($(this).val()) || 1; const totalMetres = (baseMetres * qty).toFixed(1); const totalPrice = (basePrice * qty).toFixed(2); // 更新单位数量 $('.total-price_qty .qty-units').text(qty); // 更新米数文本 $('.total-price_qty .qty-metres').text(totalMetres + '米'); // 更新价格数值 $('.total-price_qty .price-amount').text(totalPrice); // 更新价格部分的米数文本 $('.total-price_qty .price-metres').text(totalMetres + '米'); }); }); </script> <?php }
关键改动说明
- 模板结构调整:重新定义提示文本格式,新增
qty-units、price-metres类名,让JS能精准定位需要动态更新的元素 - 初始值优化:提前计算默认状态下的单位数、米数和价格,确保页面加载时显示正确的初始内容
- JS逻辑升级:
- 统一提取基础米数和价格,避免重复调用PHP变量
- 强制将数量转为整数,避免非数字输入导致的异常
- 同步更新所有动态元素,保证单位数、米数、价格完全匹配
内容的提问来源于stack exchange,提问作者Josh Wright
相关产品推荐
相关产品推荐

