Sleva z objednávky podle hodnoty košíku - Affinite.io CZ

Poměrně častým tahákem e-shopů, je sleva na nákup, která se aplikuje při dosažení určité hodnoty objednávky. Přestože najdete řadu pluginů, které to umožňují nastavit, ukážeme si, jak toho dosáhnout poměrně jednoduchým kódem.

WooCommerce obsahuje věc, která se jmenuje fee. Původně byla zamýšlena jako doplňující poplatek za něco, například za balné. Velmi dobře se fee dá použít ke zpoplatnění platební metody, jako je například dobírka.

Brzy se ale začalo fee používat i na slevy. Stačí, když zadáte zápornou hodnotu a rázem máte slevu.

Má to ale jedno omezení o kterém musíte vědět. Fee bylo vždy zamýšleno na kladné hodnoty, takže u něj nefunguje pro záporné hodnoty nastavení taxable = false. Pokud jde o slevu a vy jste plátci DPH, bude na fee vždy uplatněna daň.

A teď už k samotnému kódu.

add_action( 'woocommerce_cart_calculate_fees' , 'calculate_order_total_fee' );
function calculate_order_total_fee(){

	if ( function_exists( 'WC' ) ) {

		$total = WC()->cart->get_cart_contents_total(); //hodnota bez daně

		if ( $total > 20 ) {

			$fee = ( $total * 0.1 ) * -1;
			$args = array(
				'id' 		=> 'sleva-10-procent',
				'name' 		=> __( 'Sleva na objednávku 10%','musilda' ),
				'amount' 	=> $fee,
				'taxable' 	=> true //toto bude vždy true, při záporné hodnotě
			);
			WC()->cart->fees_api()->add_fee( $args );
		}

	}

}

A hotovo, při ceně nad 20 korun dostanu slevu 10%.

Jednoduché, že?

K snippetu mám ještě jednu informaci, kterou se jen tak někde nedozvíte.

Nepoužil jsem zcela záměrně:

WC()->cart->add_fee( $args )

Tento postup najdete snad ve všech možných návodech a postupech, jak přidat nějaké příplatky a podobně. Problém vznikne v tu chvíli, kdy budete s objednávkou pracovat a posílat ji do nějakého jiného systému.

Pokud použijete cart add_fee metodu, NEMŮŽETE ji nijak identifikovat. Máte k dispozici jen name a to je “ Sleva na objednávku 10% „. V tu chvíli, kdy ho uděláte překladatelné a přeložíte ho, již nevíte co že to v té objednávce vlastně je.

Proto jsem použil fees_api a zadal „sleva-10-procent“. Když budu posílat data například do účetního systému, vím, že fee s tímto id je sleva.

Zobrazení ceny položky v košíku bez DPH
Zobrazení ceny položky v košíku bez DPH
22 Říj, 2021
Jak zobrazit hodnotu nákupu pro získání slevy
Jak zobrazit hodnotu nákupu pro získání slevy
24 Říj, 2021

Looking for something?