Fraktjakt för WooCommerce – anpassningar via egen kod

Genom så kallade action filters och hooks finns det möjlighet att göra anpassningar genom egen kod. Här följer några exempel på hur du kan göra för att anpassa funktionalitet utifrån ditt eget behov.

Tvinga kundtyp (företag/privatperson) när tillgängliga fraktsätt hämtas från Fraktjakt


Kundtypen räknas som företag om kunden har angivit information i fältet Företag i kassan i WooCommerce. I alla andra fall skickas kundtypen över som privatperson till Fraktjakt i samband med att tillgängliga fraktsätt hämtas ut. Om man vill styra det här kan man göra på två olika sätt.

Modifiera kundtyp via filter

Genom att använda filtret kroconnect_fraktjakt_address_from_destination kan man styra kundtyp på följande sätt.

  • Privatperson: residential = true.
  • Företag: residential = false.
add_filter( 'kroconnect_fraktjakt_address_from_destination', 'krk_kroconnect_fraktjakt_force_company', 10, 2 );

/**
  * Control customer type when qery requests are done towards Fraktjakt.
  *
  * @param object     $address Customer address object that will be sent to Fraktjakt.
  * @param array      $destination Customer Destination used by WooCommerce to calculate shipping.
  * @return object    $address Modified customer address object.
  * */

function krk_kroconnect_fraktjakt_address_from_destination( $address, $destination ) {
  $address->residential = false;
	return $address;
}

Modifiera kundtyp via cookie

Det går även att sätta kundtypen via en cookie. Som standard heter den här coockien krokedil_customer_type. Namnet på cookien kan dock ändras genom filtret kroconnect_fraktjakt_customer_type_cookie_name.

Ange värdet på cookien till business för företag alternativt person för privatperson.

Exkludera produkter i anrop när tillgängliga fraktsätt hämtas från Fraktjakt


När ett anrop görs till Fraktjakt för att hämta tillgängliga fraktsätt som sedan kan visas i kassan i WooCommerce så skickas följande inför med till Fraktjakt:

  • Kundens land och postnummer.
  • Produkterna i varukorgens namn, pris, vikt och (eventuellt) dimensioner.

Genom filtret kroconnect_fraktjakt_commodity_from_cart_item kan du ändra eller ta bort någon av de produkter som är på väg att skickas med i anropet till Fraktjakt.

add_filter('kroconnect_fraktjakt_commodity_from_cart_item', 'krk_commodity_from_cart_item', 10, 3);


/**
  * Control customer type when qery requests are done towards Fraktjakt.
  *
  * @param object     $commodity The article that will be sent to Fraktjakt.
  * @param array      $cart_item The cart item from WooCommerce cart.
  * @param object     $product WooCommerce product object.
  * @return object
  * */

function krk_commodity_from_cart_item( $commodity, $cart_item, $product ) {
	if( 'art123' === $commodity->article_number ) {
        // Exclude product to be sent to Fraktjakt if sku equals art123.
		$commodity = null;
	}
	return $commodity;
}

Kundstyrd frakt: Exkludera fraktsätt i kassan baserat på om en viss fraktklass finns i varukorgen


Eftersom fraktsätten som visas i WooCommerce genereras dynamiskt när man väljer Kundstyrd frakt (dvs använder fraktmetoden kallad Fraktjakt i Woo), då kan det finnas tillfällen där man vill kontrollera tillgängligheten på ett specifikt fraktsätt. Här är ett exempel där DHL Servicepoint inte visas i kassan om varukorgen innehåller fraktklassen bulky.

add_filter( 'kroconnect_fraktjakt_add_rate', 'custom_kroconnect_fraktjakt_add_rate', 10, 2 );

/**
  * Function to potentially exclude shipping rate from available shipping options in checkout. 
  *
  * @param array $formatted_rate Data about the shipping rate that is about to be added to WooCommerce.
  * @param array $shipping_product Fraktjakt shipping product.
  * @return array|empty string
  * */
function custom_kroconnect_fraktjakt_add_rate( $formatted_rate, $shipping_product ) {
	$shipping_classes = custom_kroconnect_get_cart_shipping_classes();
	
	// If shipping class is bulky and Fraktjakt shipping product is DHL Service Point (ID 99).
	if( in_array( 'bulky', $shipping_classes, true ) && '99' === $shipping_product['id'] ) {
		$formatted_rate = '';
	}
	return $formatted_rate;
}

/**
  * Helper function to return shipping classes used in cart.
  *
  * @return array
  * */
function custom_kroconnect_get_cart_shipping_classes() {
	$shipping_classes = array();
	// Check all cart items.
	foreach ( WC()->cart->get_cart() as $cart_item ) {

		if ( ! empty( $cart_item['data']->get_shipping_class() ) ) {
			$shipping_classes[] = $cart_item['data']->get_shipping_class();
		}
	}
	return $shipping_classes;
}

Skicka med spårningslänk i e-post till kund


Nedanstående exempel lägger till fraktens spårningslänk i e-postmeddelanden som skickas från WooCommerce. Tänk på att det är först när frakten har bokats hos Fraktjakt som den här informationen finns tillgänglig i ordern i WooCommerce.

add_action( 'woocommerce_email_order_meta', 'custom_tracking_link_email_order_meta', 10, 3 );

/**
  * Function for adding Tracking Link to customer mail
  *
  * @param WC_Order $order WC order.
  * @param bool     $sent_to_admin Send to admin.
  * @param bool     $plain_text Plain text.
  * @return void
  * */
function custom_tracking_link_email_order_meta( $order, $sent_to_admin, $plain_text ) {
	$shipment_tracking_url = $order->get_meta( 'kroconnect_shipment_tracking_url', true );

	if ( ! empty( $shipment_tracking_url ) ) {

		$shipment_tracking_text = __( 'Shipment Tracking Link', 'your-text-domain' );

		echo '<a class="custom-email-shipment-tracking-link" href="' . esc_html( $shipment_tracking_url ) . '" target="_blank">' . esc_html( $shipment_tracking_text ) . '</a>';
	}
}
Rulla till toppen