add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees')
Voor een webshop zou ik onderstaande code moeten kunnen gebruiken:
Tussen 1 en 6 items in winkelmandje: 8.7 verpakkingskost
Tussen 7 en 12 items in winkelmandje: 10.59 verpakkingskost
Enz.
Ik heb voorlopig enkel dit: (code waarmee ik vaste kost (€0,10) per item reken)
add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');
function add_custom_fees( WC_Cart $cart ){
$fees = 0;
foreach( $cart->get_cart() as $item ){
$fees += $item[ 'quantity' ] * 0.10;
}
if( $fees != 0 ){
$cart->add_fee( 'Verpakkingskosten', $fees);
}
}
Alvast bedankt voor de hulp!
Groetjes,
Cedric
Wat is de probleem?
is dit wat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ipv
$fees = 0;
foreach( $cart->get_cart() as $item ){
$fees += $item[ 'quantity' ] * 0.10;
}
// dit
$fees = 0;
$aantal_items = 0;
// misschien kan deze foreach om aantal_items in $cart te bepalen eenvoudiger???
foreach( $cart->get_cart() as $item ){
$aantal_items = $aantal_items +1;
}
if ($aantal_items >= 1 and $aantal_items <= 6) {$fees = 8.7;}
if ($aantal_items >= 7 and $aantal_items <= 12) {$fees = 10.59;}
$fees = 0;
foreach( $cart->get_cart() as $item ){
$fees += $item[ 'quantity' ] * 0.10;
}
// dit
$fees = 0;
$aantal_items = 0;
// misschien kan deze foreach om aantal_items in $cart te bepalen eenvoudiger???
foreach( $cart->get_cart() as $item ){
$aantal_items = $aantal_items +1;
}
if ($aantal_items >= 1 and $aantal_items <= 6) {$fees = 8.7;}
if ($aantal_items >= 7 and $aantal_items <= 12) {$fees = 10.59;}
Wanneer het totaal aantal items in het winkelmandje tussen de 1 en 6 is, komen hier inderdaad 8,7 euro kosten bij.
Maar wanneer er meer dan 6 items zijn, veranderen deze kosten niet naar 10,59...
Enig idee hoe dit op te lossen is?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');
function add_custom_fees( WC_Cart $cart ){
$fees = 0;
$aantal_items = 0;
foreach( $cart->get_cart() as $item ){
$aantal_items = $aantal_items +1;
}
if ($aantal_items >= 1 and $aantal_items <= 6) {$fees = 8.7;}
if ($aantal_items >= 7 and $aantal_items <= 12) {$fees = 10.59;}
$cart->add_fee( 'Verpakkingskosten', $fees);
}
function add_custom_fees( WC_Cart $cart ){
$fees = 0;
$aantal_items = 0;
foreach( $cart->get_cart() as $item ){
$aantal_items = $aantal_items +1;
}
if ($aantal_items >= 1 and $aantal_items <= 6) {$fees = 8.7;}
if ($aantal_items >= 7 and $aantal_items <= 12) {$fees = 10.59;}
$cart->add_fee( 'Verpakkingskosten', $fees);
}
De regels die ik heb voorgesteld gaan maar tot en met 12 items. Dus als je er meer items hebt dan 12 wordt er geen fees berekend.
Je zult dus regels toe moeten voegen na regel 11.
$fees = $aantal_items;
Dan zou je verpakkingskosten gelijk moeten zijn aan het aantal items dat je probeert te tellen.
Nu geeft de verpakkingskost telkens €1, ongeacht het aantal items
Stel ik bestel 6 x ASTI SPUMANTE MONTI FURCHI. Is dat 1 item of 6 items?
Het totaal aantal flessen dus
En dan $aantal_items + 1 vervangen door $aantal_items + $besteld.
Ik ken woocommerce niet, maar snelle google levert $item['quantity'] op, dus dan zou regel 7 worden
$aantal_items = $aantal_items + $item['quantity'];
*** toevoeging ***
Als ik verder google, in plaats van de foreach zou dit ook moeten kunnen:
$aantal_items = $cart->cart_contents_count;
Gewijzigd op 04/06/2016 16:37:29 door Jan de Laet
De verpakkingskosten kloppen nu volgens het aantal bestelde flessen.
Deze verpakkingskosten heeft dus als naam: function add_custom_fees
Kan ik rond deze functienaam gebruiken om deze in een andere if functie te zetten?
Er zijn altijd verpakkingskosten, maar in 2 gevallen (bij afhalen, of bij bedrag boven de €250) valt deze kost weg...
Het zal ongetwijfeld mogelijk zijn om deze twee gevallen uit de $cart gegevens te halen.
En dan kun je in de functie dit gebruiken in een if om regels 10-13 uit post van 15:21.
Hoe heb je aantal besteld nu bepaald? Met foreach of met cart_contents_count?
Dat gaf het aantal bestelde items weer
Oké, nogmaals bedankt voor alle hulp! :)
Toevoeging op 04/06/2016 17:16:06:
Met deze code is het dus gelukt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');
function add_custom_fees( WC_Cart $cart ){
$fees = 0;
$aantal_items = 0;
foreach( $cart->get_cart() as $item ){
$aantal_items = $aantal_items + $item['quantity'];
}
if ($aantal_items >= 1 and $aantal_items <= 6) {$fees = 8.7;}
if ($aantal_items >= 7 and $aantal_items <= 12) {$fees = 10.6;}
if ($aantal_items >= 13 and $aantal_items <= 18) {$fees = 11.8;}
if ($aantal_items >= 19 and $aantal_items <= 24) {$fees = 20.5;}
if ($aantal_items >= 25 and $aantal_items <= 30) {$fees = 22.4;}
if ($aantal_items >= 31 and $aantal_items <= 36) {$fees = 23.6;}
if ($aantal_items >= 37 and $aantal_items <= 42) {$fees = 32.3;}
if ($aantal_items >= 43 and $aantal_items <= 48) {$fees = 34.2;}
if ($aantal_items >= 49 and $aantal_items <= 54) {$fees = 35.4;}
$cart->add_fee( 'Verpakkingskosten', $fees);
}