匹配制造商和买家邮政编码并显示 Woocommerce 特殊运输选项

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

我是新来的,因为我是前端开发人员(设计),所以我不知道如何解决这个问题。

我希望产品/制造商的邮政编码与客户的邮政编码相匹配,以显示特殊的运费。这就是我现在所拥有的,但它不起作用。产品中会出现一个用于输入邮政编码的字段,但它与买家的邮政编码不“匹配”。谢谢

// Add a field to enter the manufacturer's ZIP code on the product page
add_action('woocommerce_product_options_general_product_data', 'dodaj_zip_proizvodjaca');
function dodaj_zip_proizvodjaca() {
    woocommerce_wp_text_input(array(
        'id' => '_zip_proizvodjaca',
        'label' => 'ZIP proizvođača',
        'desc_tip' => true,
        'description' => 'Unesite ZIP kod proizvođača ovog proizvoda.',
    ));
}

// Save the manufacturer ZIP code value
add_action('woocommerce_process_product_meta', 'sacuvaj_zip_proizvodjaca');
function sacuvaj_zip_proizvodjaca($post_id) {
    $zip = isset($_POST['_zip_proizvodjaca']) ? sanitize_text_field($_POST['_zip_proizvodjaca']) : '';
    update_post_meta($post_id, '_zip_proizvodjaca', $zip);
}


// Add a separate shipping method if the ZIP codes are the same
add_filter('woocommerce_package_rates', 'poseban_nacin_dostave_za_isti_zip', 10, 2);
function poseban_nacin_dostave_za_isti_zip($rates, $package) {
    $isti_zip = false;
    $zip_kupca = WC()->customer->get_shipping_postcode();

    foreach ($package['contents'] as $item_id => $values) {
        $product_id = $values['product_id'];
        $zip_proizvodjaca = get_post_meta($product_id, '_zip_proizvodjaca', true);

        if ($zip_proizvodjaca && $zip_kupca && $zip_proizvodjaca == $zip_kupca) {
            $isti_zip = true;
            break;
        }
    }

    if ($isti_zip) {
        // Add a special shipping method
        $rates['poseban_nacin_dostave'] = array(
            'id' => 'poseban_nacin_dostave',
            'label' => 'Specijalna dostava za isti ZIP',
            'cost' => 180, // besplatna dostava ili cena po izboru
            'taxes' => '',
            'calc_tax' => 'per_order',
        );
    }

    return $rates;
}
woocommerce hook-woocommerce
1个回答
0
投票

您的代码不起作用,因为您需要首先在 WooCommerce 设置中设置(定义)统一费率送货方式,并使用正确的成本和设置。

因此,如果制造商邮政编码与客户邮政编码不匹配,您将隐藏此统一费率送货方式,但如果匹配,您将显示它(可选择隐藏其他送货方式)。

完成后,您需要更改最后一个函数:

// Add a separate shipping method if the ZIP codes are the same
add_filter('woocommerce_package_rates', 'poseban_nacin_dostave_za_isti_zip', 10, 2);
function poseban_nacin_dostave_za_isti_zip($rates, $package) {
    // Here below define the targeted shipping method rate ID
    $targeted_method = 'flat_rate:11'; 

    $zip_kupca = WC()->customer->get_shipping_postcode();
    $isti_zip = false;

    // Loop through cart items for the current shipping package
    foreach ($package['contents'] as $item) {
        $zip_proizvodjaca = get_post_meta($item['product_id'], '_zip_proizvodjaca', true);

        if ($zip_proizvodjaca && $zip_kupca && $zip_proizvodjaca == $zip_kupca) {
            $isti_zip = true;
            break;
        }
    }

    // If postcodes doesn't match
    if ( ! $isti_zip && isset($rates[$targeted_method]) ) {
        // Hide the targeted shipping method
        unset($rates[$targeted_method]);
    } 
    // If postcodes matches (optional)
    else {
        // Hide other shipping methods
        return array($targeted_method => $rates[$targeted_method]);
    }
    return $rates;
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

重要:清空购物车以刷新运输方式缓存数据。

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