讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 WooCommerce 单品页自动列出所有变体商品价格

老浩大大_3448

老浩大大_3448

发布时间:2025-12-01 10:25:35

|

589人浏览过

|

来源于php中文网

原创

如何在 WooCommerce 单品页自动列出所有变体商品价格

本教程详细指导如何在 woocommerce 单品页面自动展示所有商品变体的价格列表。通过集成自定义 php 函数和 woocommerce 动作钩子,您可以摆脱手动维护变体价格的繁琐,确保价格更新即时同步,并显著提升用户体验,让顾客无需切换选项即可一览所有变体的价格信息。

理解需求:自动化显示变体价格的必要性

在 WooCommerce 中,可变商品(Variable Product)允许商家为同一商品设置不同的属性组合(如尺寸、颜色)并对应不同的价格。默认情况下,顾客需要在单品页面通过下拉菜单选择特定变体后,才能看到该变体的价格。对于拥有多个变体和复杂价格结构的商品,这种交互方式可能导致用户体验不佳,因为顾客需要多次操作才能了解所有价格范围。

手动在商品描述中列出所有变体价格不仅耗时,而且一旦价格发生变动,就需要手动更新文本,极易出错且效率低下。本教程旨在提供一个自动化解决方案,通过编程方式动态获取并显示所有变体价格,确保数据的准确性和实时性。

核心实现:通过自定义函数获取并展示变体价格

要实现变体价格的自动化展示,我们需要编写一个自定义 PHP 函数,该函数将负责:

  1. 判断当前商品是否为可变商品。
  2. 获取所有可用的变体。
  3. 遍历每个变体,提取其价格信息。
  4. 将价格信息格式化并输出为列表。

这个函数通常放置在您当前主题(推荐使用子主题)的 functions.php 文件中。

编写自定义函数

以下是实现上述功能的 PHP 代码:

/**
 * 在 WooCommerce 单品页列出所有变体商品的价格
 */
function list_variation_prices() {
    global $product; // 获取当前全局的商品对象

    // 检查当前商品是否为可变商品
    if ( $product && $product->is_type('variable') ) {
        // 获取所有子变体的ID
        $variation_ids = $product->get_children();

        // 如果存在变体,则开始构建价格列表
        if ( ! empty( $variation_ids ) ) {
            echo '<div class="product-variations-price-list">'; // 添加一个容器 div 便于样式控制
            echo '<h4>所有变体价格:</h4>'; // 添加一个标题
            echo '<ul>'; // 开始无序列表

            foreach ( $variation_ids as $variation_id ) {
                // 根据变体ID获取变体商品对象
                $vproduct = wc_get_product( $variation_id );

                // 确保变体商品对象有效且可购买
                if ( $vproduct && $vproduct->is_purchasable() && $vproduct->get_price() !== '' ) {
                    // 获取并输出变体的价格HTML,包括销售价和原价
                    echo '<li>' . $vproduct->get_name() . ': ' . $vproduct->get_price_html() . '</li>';
                }
            }
            echo '</ul>'; // 结束无序列表
            echo '</div>'; // 结束容器 div
        }
    }
}

代码解析:

  • global $product;: 声明全局变量 $product,以便在函数内部访问当前正在显示的商品对象。
  • $product->is_type('variable'): 判断当前商品是否为可变商品。只有可变商品才会有变体价格列表。
  • $product->get_children(): 获取当前可变商品的所有子变体的 ID 数组。
  • wc_get_product( $variation_id ): 根据变体 ID 获取对应的 WC_Product_Variation 对象,通过此对象我们可以访问变体的详细信息,如名称和价格。
  • $vproduct->get_name(): 获取变体的名称。这通常是其属性的组合,例如“T恤 - 红色, 大号”。
  • $vproduct->get_price_html(): 这是 WooCommerce 提供的一个非常方便的方法,它会自动根据变体的常规价格和销售价格生成格式化的 HTML 价格字符串(例如,会显示划线的原价和当前的销售价)。
  • <ul> 和 <li> 标签:用于将价格列表以标准 HTML 无序列表的形式呈现,便于阅读和样式控制。

集成到 WooCommerce 单品页:使用 Action Hook

仅仅定义了函数还不够,我们还需要告诉 WooCommerce 何时何地执行这个函数。这通过使用 WooCommerce 的“动作钩子”(Action Hook)来实现。动作钩子允许我们在 WooCommerce 的特定事件或位置插入自定义代码。

Doc To HTML
Doc To HTML

使用 MinerU 文档处理引擎将 Word 文档(.doc、.docx)转换为保留结构和格式的干净 HTML。

下载

对于在单品页显示内容,woocommerce_single_product_summary 是一个常用的钩子,它位于商品摘要区域。

/**
 * 将自定义价格列表函数挂载到 WooCommerce 单品页面的摘要区域
 * 优先级 25 将使其显示在商品描述(excerpt)之后,添加到购物车按钮之前。
 */
add_action( 'woocommerce_single_product_summary', 'list_variation_prices', 25 );

add_action() 函数解析:

  • woocommerce_single_product_summary: 这是 WooCommerce 提供的一个动作钩子,位于商品标题、评分、价格和简短描述之后,添加到购物车按钮之前。
  • 'list_variation_prices': 这是我们上面定义的函数名,表示当 woocommerce_single_product_summary 钩子被触发时,将执行 list_variation_prices 函数。
  • 25: 这是优先级参数。数字越小,函数执行得越早。默认优先级是 10。通过调整这个数字,您可以控制价格列表在单品页摘要区域中的具体位置。

以下是 woocommerce_single_product_summary 钩子中一些常见元素的默认优先级,供您参考:

  • woocommerce_template_single_title - 5 (商品标题)
  • woocommerce_template_single_rating - 10 (商品评分)
  • woocommerce_template_single_price - 10 (主价格显示)
  • woocommerce_template_single_excerpt - 20 (商品简短描述)
  • woocommerce_template_single_add_to_cart - 30 (添加到购物车按钮)
  • woocommerce_template_single_meta - 40 (商品元数据,如 SKU, 分类, 标签)
  • woocommerce_template_single_sharing - 50 (商品分享按钮)

将优先级设置为 25,意味着我们的价格列表将显示在商品简短描述(优先级 20)之后,添加到购物车按钮(优先级 30)之前。

完整代码示例

将以下代码片段完整添加到您的子主题的 functions.php 文件中:

<?php
/**
 * 在 WooCommerce 单品页列出所有变体商品的价格
 */
function list_variation_prices() {
    global $product;

    if ( $product && $product->is_type('variable') ) {
        $variation_ids = $product->get_children();

        if ( ! empty( $variation_ids ) ) {
            echo '<div class="product-variations-price-list">';
            echo '<h4>所有变体价格:</h4>';
            echo '<ul>';

            foreach ( $variation_ids as $variation_id ) {
                $vproduct = wc_get_product( $variation_id );

                if ( $vproduct && $vproduct->is_purchasable() && $vproduct->get_price() !== '' ) {
                    echo '<li>' . $vproduct->get_name() . ': ' . $vproduct->get_price_html() . '</li>';
                }
            }
            echo '</ul>';
            echo '</div>';
        }
    }
}

/**
 * 将自定义价格列表函数挂载到 WooCommerce 单品页面的摘要区域
 * 优先级 25 将使其显示在商品描述(excerpt)之后,添加到购物车按钮之前。
 */
add_action( 'woocommerce_single_product_summary', 'list_variation_prices', 25 );
?>

注意事项与最佳实践

  1. 代码放置位置:务必将代码放置在子主题的 functions.php 文件中。直接修改父主题的 functions.php 会在主题更新时丢失您的更改。如果您没有子主题,建议先创建一个。
  2. 价格显示格式
    • $vproduct->get_price_html() 会输出包含货币符号、销售价(如果适用)和HTML标签的完整价格字符串。
    • 如果您只需要裸露的价格数字,可以使用 $vproduct->get_price() 获取当前价格(可能是销售价),$vproduct->get_regular_price() 获取常规价格,或 $vproduct->get_sale_price() 获取销售价格。您可以根据需求替换 get_price_html()。
  3. 样式定制:代码中为价格列表添加了 product-variations-price-list 类和 h4 标题。您可以使用 CSS 对其进行美化,以符合您网站的整体设计。例如:
    .product-variations-price-list {
        margin-top: 20px;
        border-top: 1px solid #eee;
        padding-top: 15px;
    }
    .product-variations-price-list h4 {
        font-size: 1.1em;
        margin-bottom: 10px;
    }
    .product-variations-price-list ul {
        list-style: none;
        padding-left: 0;
    }
    .product-variations-price-list li {
        margin-bottom: 5px;
        line-height: 1.5;
    }
    .product-variations-price-list li ins { /* 销售价样式 */
        color: #e24b4b;
        font-weight: bold;
        text-decoration: none;
    }
    .product-variations-price-list li del { /* 原价样式 */
        color: #999;
        text-decoration: line-through;
        margin-right: 5px;
    }
  4. 性能考量:对于拥有极大量变体(例如数百个)的商品,遍历所有变体并获取其数据可能会对页面加载速度产生轻微影响。在大多数情况下,这并不是问题,但如果您遇到性能瓶颈,可能需要考虑缓存机制或更高级的优化方法。
  5. 多语言支持:如果您使用多语言插件(如 WPML 或 Polylang),确保变体名称和任何自定义文本都通过 __() 或 _e() 函数进行国际化,以便翻译。例如:echo '<h4>' . __('所有变体价格:', 'your-text-domain') . '</h4>';

总结

通过上述步骤,您已经成功地在 WooCommerce 单品页实现了所有商品变体价格的自动化列表显示。这个解决方案不仅提升了网站的易用性,减少了手动维护的工作量,还确保了价格信息的实时性和准确性。这种方法是 WooCommerce 开发中利用动作钩子和自定义函数来扩展核心功能的典型示例,对于提升用户体验和运营效率都具有重要意义。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

3605

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

1470

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

179

2026.03.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1518

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2184

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5704

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

4709

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

6454

2024.03.22

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 93.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn