我是新来的,因为我是前端开发人员(设计),所以我不知道如何解决这个问题。
我希望产品/制造商的邮政编码与客户的邮政编码相匹配,以显示特殊的运费。这就是我现在所拥有的,但它不起作用。产品中会出现一个用于输入邮政编码的字段,但它与买家的邮政编码不“匹配”。谢谢
// 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 设置中设置(定义)统一费率送货方式,并使用正确的成本和设置。
因此,如果制造商邮政编码与客户邮政编码不匹配,您将隐藏此统一费率送货方式,但如果匹配,您将显示它(可选择隐藏其他送货方式)。
完成后,您需要更改最后一个函数:
// 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 文件中(或插件中)。应该可以。
重要:清空购物车以刷新运输方式缓存数据。