在 WooCommerce 的单个产品页面上显示运输方式成本

问题描述 投票:0回答:1

所以我尝试根据运输类别输出交货方式并显示其价格、交货时间。

我设法达到了一切正常运行的地步,但价格没有正确更新。即使价格设置为 3,50,它也始终显示 0,00。

我可以将其直接放入代码中,但我想从 WooCommerce 交付设置中更新它。

function display_shipping_methods() {
    global $product;

    if ($product->needs_shipping()) {
        $output = '<div class="shipping-methods">';
        $output .= '<h5>Galimi pristatymo būdai:</h5>';
        $output .= '<ul>';

        // Check the product's shipping class slug
        $product_shipping_class = wc_get_product_terms($product->get_id(), 'product_shipping_class');
        $product_shipping_class_slug = !empty($product_shipping_class) ? esc_html($product_shipping_class[0]->slug) : '';

        if ($product_shipping_class_slug === '1') {
            // If the product's shipping class slug is '1', allow specific delivery methods
            $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();
            foreach ($shipping_zones as $shipping_zone) {
                $shipping_methods = $shipping_zone['shipping_methods'];

                foreach ($shipping_methods as $method) {
                    $method_title = esc_html($method->get_title());
                    $method_id = $method->instance_id; // Get the method ID

                    // Check if the method title matches exactly with allowed methods
                    if (array_key_exists($method_title, $allowed_shipping_methods)) {
                        $method_class = sanitize_title($method_title);

                        // Get the cost for the method dynamically based on its ID
                        $method_cost = get_option("woocommerce_flat_rate_{$method_id}_cost");
                        $delivery_time = $allowed_shipping_methods[$method_title];

                        $output .= '<li class="' . $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');

使配送方式及其详细信息显示在单个产品页面中。

php wordpress woocommerce product shipping-method
1个回答
0
投票

尝试从运输设置中获取运输成本时出现错误以及一些不必要的复杂情况。

此外,要根据设置成本获得正确的成本,您需要首先检查是否为产品运输类别设置了成本......

尝试以下操作:

function display_shipping_methods() {
    global $product;

    if ($product->needs_shipping()) {
        $output = '<div class="shipping-methods">';
        $output .= '<h5>Galimi pristatymo būdai:</h5>';
        $output .= '<ul>';

        // Get product shipping class slug
        $shipping_class_slug = $product->get_shipping_class();

        // check that the product has the correct shipping class slug
        if ($shipping_class_slug === '1') {
            // Define here the allowed shipping methods with their delivery time
            $allowed_shipping_methods = array(
                'Atsiėmimas vietoje' => '2-4 dienos',
                'Omniva (Lithuania) Paštomatai' => '1-3 dienos',
                'LP Express Paštomatai' => '1-3 dienos',
            );

            // Loop thhrough shipping zones
            foreach ( WC_Shipping_Zones::get_zones() as $shipping_zone ) {
                $shipping_methods = $shipping_zone['shipping_methods'];

                foreach ($shipping_methods as $method) {
                    $method_title = esc_html($method->get_title());
                    $method_id = $method->instance_id; // Get the method ID

                    // Check if the method title matches exactly with allowed methods
                    if (array_key_exists($method_title, $allowed_shipping_methods)) {
                        $method_class  = sanitize_title($method_title);
                        $delivery_time = $allowed_shipping_methods[$method_title];

                        $output .= '<li class="' . $method_class . '">';
                        $output .= '<span class="method-icon"></span>';
                        $output .= esc_html($method_title);

                        // Get the shipping settings from database
                        $method_settings = get_option("woocommerce_flat_rate_{$method_id}_settings");
                        $class_id = $product->get_shipping_class_id(); // Get the product shipping class ID

                        // Check if the cost is set for the product shipping class ID
                        if ( isset($method_settings["class_cost_{$class_id}"]) ) {
                            $output .= ' - Price: ' . wc_price($method_settings["class_cost_{$class_id}"]);
                        }
                        // else get the normal cost
                        elseif ( isset($method_settings['cost']) ) {
                            $output .= ' - Price: ' . wc_price($method_settings['cost']);
                        }
                        $output .= ' - Delivery Time: ' . esc_html($delivery_time);
                        $output .= '</li>';
                    }
                }
            }
        }

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

add_shortcode('shipping_methods', 'display_shipping_methods');

应该有效

© www.soinside.com 2019 - 2024. All rights reserved.