WooCommerce单品页仅显示首个变体价格,求显示全部变体价格方案
解决WooCommerce可变产品显示所有变体价格的问题
你需要通过foreach循环遍历所有可用变体,替代原来仅获取第一个变体的逻辑,以下是修改后的完整代码:
<?php global $product; // 简单产品逻辑(如需保留可继续使用,无需可删除) if ($product->is_type( 'simple' )) { // 这里可添加简单产品的自定义逻辑 } // 可变产品处理逻辑 if($product->is_type('variable')) { $available_variations = $product->get_available_variations(); // 遍历所有可用变体 foreach($available_variations as $variation) { $variation_id = $variation['variation_id']; $variable_product = new WC_Product_Variation($variation_id); // 获取变体的常规价格和促销价 $regular_price = $variable_product->get_regular_price(); $sale_price = $variable_product->get_sale_price(); // 输出变体信息与价格(可根据需求调整格式) echo '<div class="variation-price-item">'; // 显示变体属性(如颜色、尺寸,方便用户区分) if(!empty($variation['attributes'])) { foreach($variation['attributes'] as $attr_key => $attr_value) { $attr_name = str_replace('attribute_', '', $attr_key); echo '<span class="variation-attr">' . wc_attribute_label($attr_name) . ': ' . $attr_value . '</span>'; } } // 按你原逻辑输出价格总和,也可修改为分别显示原价/促销价 echo '<span class="price-total">合计价格: ' . wc_price($regular_price + $sale_price) . '</span>'; echo '</div>'; } } ?>
关键修改点:
- 使用
foreach($available_variations as $variation)遍历所有变体,替代仅取第一个变体的写法 - 改用WooCommerce官方推荐的
$product->is_type('variable')判断产品类型,替代过时的product_type属性直接访问 - 用
get_regular_price()和get_sale_price()方法获取价格,替代直接访问对象属性,提升代码兼容性 - 新增变体属性显示逻辑,帮助用户区分不同变体选项(无需可直接删除这部分代码)
- 用
wc_price()格式化价格,自动适配店铺的货币设置
注意事项:
- 确保修改的是子主题中的
content-single-product.php文件,不要直接修改WooCommerce核心文件,避免插件更新丢失自定义内容 - 若无需将原价和促销价相加,可调整价格输出逻辑,比如分别显示原价与促销价:
echo '<span class="regular-price">原价: ' . wc_price($regular_price) . '</span>'; if(!empty($sale_price)) { echo '<span class="sale-price">促销价: ' . wc_price($sale_price) . '</span>'; }
内容的提问来源于stack exchange,提问作者DrMTR
相关产品推荐
相关产品推荐

