View Categories

Snippet-uri de cod utile pentru personalizare aditionala a functionalitatilor DPD

4 min read

Pret diferentiat pentru DPD Box #

Daca doriti sa afisati preturi manuale diferentiate pentru DPD vs DPD Box  atunci inserati urmatorul snippet (costul pentru DPD Box se seteaza in locul cifrelor verzi.):

add_filter('curiero_overwrite_dpd_box_shipping', function (array $args): array {
  if ($args['cost'] != 0) {
    $args['cost'] = 12;
  }
  return $args;
}, 10, 1);

Afisare numar de comanda pe AWB #

Daca doriti sa afisati numarul de comanda pe AWB, atunci inserat urmatorul snippet de cod:

add_filter('curiero_awb_details', function ($awb, $courier, $order) {
    if (!in_array($courier, ['DPD'])) return $awb;
    if ($courier == 'DPD') {
        $awb['ref1'] = $order->get_order_number();
    }
    return $awb;
}, 10, 3);

Setare numar zile de preluare intarziata a comenzii #

DPD are o setare prin care puteti alege ca sa va fie preluate comenzile al caror AWB l-ati generat azi dupa un numar de zile (intre 0 si 2). Inserati urmatorul snippet si inlocuiti numarul de zile dorite in locul cifrelor verzi

add_filter('curiero_awb_details_overwrite', function (array $awb_info, string $courier, string $order_id): array {
	if (
		!class_exists(CurieRO_Printing_DPD::class)
		|| CurieRO_Printing_DPD::$public_name !== $courier
	) {
		return $awb_info;
	}

	return array_merge(
		$awb_info,
		['deferredDays' => 2]
	);
}, 10, 3);

Afisarea conținutului în nota de colet #

Aceast snippet de cod vă ajută să afișați informațiile din câmpul „continut” în nota de colet, fără să vă faceți griji că informațiile vor fi tăiate din cauza limitării numărului de caractere din câmpul „continut”

add_filter('curiero_awb_details', function (array $awb_details, string $courier): array {
    if (class_exists(CurieRO_Printing_DPD::class) && $courier === CurieRO_Printing_DPD::$public_name) {
        $awb_details['shipmentNote'] = $awb_details['contents'];
        $awb_details['contents'] = 'N/A';
    }
    return $awb_details;
}, 10, 2);

Dezactivare livrare la locker in functie de dimensiuni sau greutate comanda #

Acest cod permite dezactivarea metodei de livrare la DPD Box in cazul in care dimensiunea sau greutatea totala a produselor dintr-o comanda nu sunt permise sau nu incap intr-un DPD Box. Va rugam adaptati valorile boldate in functie de specificatiile maxima de acceptanta ale curierului:

add_filter('woocommerce_package_rates', 'disable_dpdbox_shipping_based_on_cart', 10, 2);
function disable_dpdbox_shipping_based_on_cart($rates, $package)
{
    // Define the maximum allowable dimensions
    $max_length = 60;
    $max_width = 35;
    $max_height = 37;

    // Define the volumetric divisor (standard values range between 5000 and 6000)
    $volumetric_divisor = 6000;

    // Define the maximum allowable weight
    $max_weight = 20;

    // Initialize total dimensions, actual weight, and volumetric weight
    $total_length = 0;
    $total_width = 0;
    $total_height = 0;
    $total_actual_weight = 0;
    $total_volumetric_weight = 0;

    // Loop through each item in the cart
    foreach (WC()->cart->get_cart() as $cart_item) {
        // Get the product object
        $product = $cart_item['data'];

        // Get product dimensions and weight
        $length = $product->get_length();
        $width = $product->get_width();
        $height = $product->get_height();
        $actual_weight = $product->get_weight() * $cart_item['quantity'];

        // Calculate the volume for the product
        $volume = $length * $width * $height;

        // Calculate the volumetric weight for the product
        $volumetric_weight = ($volume / $volumetric_divisor) * $cart_item['quantity'];

        // Accumulate the total dimensions, actual weight, and volumetric weight
        $total_length += $length;
        $total_width += $width;
        $total_height += $height;
        $total_actual_weight += $actual_weight;
        $total_volumetric_weight += $volumetric_weight;
    }

    // Determine the larger weight for comparison
    $effective_weight = max($total_actual_weight, $total_volumetric_weight);

    // Check if the total dimensions or effective weight exceed the limit
    if ($total_length > $max_length || $total_width > $max_width || $total_height > $max_height || $effective_weight > $max_weight) {
        // If the conditions are met, remove the shipping method
        if (isset($rates['curiero_dpd_box'])) unset($rates['curiero_dpd_box']);
    }

    return $rates;
}

Hook nou pentru statusul AWB-ului #

Am introdus un hook nou care vă permite să actualizați automat statusul unei comenzi, în funcție de statusul livrării.

Acest hook se numește curiero_awb_status_changed și poate fi folosit, de exemplu, pentru a marca automat o comandă ca Anulată dacă coletul a fost refuzat de client.

Vă oferim un exemplu de cod mai jos. Trebuie să completați exact denumirea statusurilor de livrare pe care le considerați ca fiind refuzuri (ex: pentru Sameday și DPD, vedeți liniile din cod marcate).
De asemenea, dacă aveți un status personalizat pentru comenzile anulate, înlocuiți linia $status = 'cancelled'; cu denumirea statusului folosit de dumneavoastră.

add_action('curiero_awb_status_changed', function ($public_name, $order, $awb, $response) {
$refusal_statuses = [
'generic' => ['Refuzat'],
'Bookurier' => ['17'],
'DPD' => ['Expedierea ta a fost refuzată.'],
'ExpressCourier' => ['Refuz primire destinatar'],
'FanCourier' => ['6', 'S6'],
'Sameday'=> [
'Refusal of receipt',
'Order refused by recipient'
]
];

if( isset($refusal_statuses[$public_name]) &&
in_array($response, $refusal_statuses[$public_name])
) {
$status = 'cancelled';
$order->update_status($status, 'Livrarea a fost refuzată.');
}
}, 10, 4);