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

WooCommerce单品页配送方式费用显示异常排查

解决WooCommerce单品页配送价格显示0.00的问题

问题根源

原代码存在几个导致价格无法正确获取的核心问题:

  • 硬编码了Flat Rate类型的配置选项键,若你的配送方法并非Flat Rate,会直接取不到正确值;
  • 直接调用get_option读取配置不够可靠,WooCommerce本身提供了配送方法对象的内置方法来获取成本;
  • 未处理默认配送区域,未分配到特定区域的配送方法会被忽略;
  • 获取产品配送类的逻辑冗余,可大幅简化。

修正后的代码

function display_shipping_methods() {
    global $product;

    if ( ! $product || ! $product->needs_shipping() ) {
        return '';
    }

    $output = '<div class="shipping-methods">';
    $output .= '<h5>Galimi pristatymo būdai:</h5>';
    $output .= '<ul>';

    // 直接获取产品配送类slug,简化逻辑
    $product_shipping_class_slug = $product->get_shipping_class();

    if ( $product_shipping_class_slug === '1' ) {
        $allowed_shipping_methods = array(
            'Atsiėmimas vietoje' => '2-4 dienos',
            'Omniva (Lithuania) Paštomatai' => '1-3 dienos',
            'LP Express Paštomatai' => '1-3 dienos',
        );

        // 获取所有配送区域,包括默认区域
        $shipping_zones = WC_Shipping_Zones::get_zones();
        $default_zone = WC_Shipping_Zones::get_zone_by('id', 0);
        $shipping_zones[] = $default_zone;

        foreach ( $shipping_zones as $shipping_zone ) {
            if ( empty( $shipping_zone['shipping_methods'] ) ) {
                continue;
            }

            foreach ( $shipping_zone['shipping_methods'] as $method ) {
                $method_title = $method->get_title();

                if ( array_key_exists( $method_title, $allowed_shipping_methods ) ) {
                    $method_class = sanitize_title( $method_title );
                    // 使用配送方法内置方法获取成本,兼容多种方法类型
                    $method_cost = $method->get_cost();
                    $delivery_time = $allowed_shipping_methods[$method_title];

                    $output .= '<li class="' . esc_attr( $method_class ) . '">';
                    $output .= '<span class="method-icon"></span>';
                    $output .= esc_html( $method_title );
                    $output .= ' - Price: ' . wc_price( $method_cost );
                    $output .= ' - Delivery Time: ' . esc_html( $delivery_time );
                    $output .= '</li>';
                }
            }
        }
    }

    $output .= '</ul>';
    $output .= '</div>';
    return $output;
}

add_shortcode('shipping_methods', 'display_shipping_methods');

关键修改说明

  • 简化配送类获取:用$product->get_shipping_class()直接获取配送类slug,替代冗余的术语查询逻辑;
  • 兼容多种配送方法:使用$method->get_cost()方法获取成本,不管是Flat Rate还是其他支持成本配置的配送方法,都能正确读取设置值;
  • 包含默认区域:加入默认配送区域的处理,确保未分配到特定区域的配送方法也能被检索到;
  • 增强安全性:对HTML属性使用esc_attr()转义,避免XSS风险;
  • 容错处理:增加对$product对象的判断,避免无产品上下文时出现报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:23:18