You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP钩子或函数修改Woocommerce默认价格的HTML结构

修改WooCommerce价格HTML结构的实现方案

没问题,咱们可以通过WooCommerce的woocommerce_get_price_html钩子结合PHP的DOM文档操作来精准修改价格的HTML结构,这种方式比直接字符串替换更可靠,能完美适配动态生成的价格内容。

以下是完整的自定义函数代码:

add_filter('woocommerce_get_price_html', 'custom_modify_price_html', 10, 2);
function custom_modify_price_html($price_html, $product) {
    // 仅处理可变价格(价格区间)的情况,若需要适配所有价格类型可移除该判断
    if (!$product->is_type('variable')) {
        return $price_html;
    }

    // 抑制DOMDocument解析HTML时的警告信息
    libxml_use_internal_errors(true);
    
    // 加载价格HTML到DOM文档,处理UTF-8编码兼容问题
    $dom = new DOMDocument();
    $dom->loadHTML(mb_convert_encoding($price_html, 'HTML-ENTITIES', 'UTF-8'));
    
    // 定位p.price标签并添加自定义类名
    $price_p_tag = $dom->getElementsByTagName('p')->item(0);
    if ($price_p_tag && $price_p_tag->getAttribute('class') === 'price') {
        $price_p_tag->setAttribute('class', 'price woo-custom-price');
    }

    // 定位所有bdi标签,分别给两个价格区间的标签添加自定义类
    $bdi_tags = $dom->getElementsByTagName('bdi');
    if ($bdi_tags->length >= 2) {
        $bdi_tags->item(0)->setAttribute('class', 'custom-price-one');
        $bdi_tags->item(1)->setAttribute('class', 'custom-price-two');
    }

    // 恢复默认错误处理机制
    libxml_clear_errors();
    libxml_use_internal_errors(false);

    // 移除DOM自动添加的html/body包裹标签,输出纯净的价格HTML
    return preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), '', $dom->saveHTML()));
}

代码说明:

  • 借助woocommerce_get_price_html钩子拦截WooCommerce生成的原始价格HTML,确保修改逻辑完全嵌入官方渲染流程
  • 使用DOMDocument解析HTML,避免了字符串替换可能出现的适配问题(比如价格格式变动、额外空格干扰等)
  • 针对可变产品的价格区间场景,精准给目标标签添加自定义类名,不影响其他类型产品的价格渲染
  • 加入编码转换和错误抑制处理,保证在不同服务器环境下的稳定性

使用方法:

将这段代码添加到你的WordPress主题functions.php文件中,或者自定义插件的PHP文件里,保存后刷新页面即可看到修改后的价格HTML结构。

内容的提问来源于stack exchange,提问作者Husan Qodirov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:58:12