salut,
première chose : ton code n'est syntaxiquement pas correct
cette ligne (et les suivantes) $custom_price = 5%;
donne Parse error: syntax error, unexpected ';'
une chaine de caractère doit être délimitée par des ' ou des "
$custom_price = '5%';
$value[‘variation’] contient un tableau ?
si ce n'est pas le cas n'utilise pas array_intersect. si c'est juste un problème de casse utilise
strtolower pour la comparaison se sera plus simple, plus lisible et plus fiable (on ne devrait utiliser que des fonctions qui retourne un booléen dans une condition).
a priori tu veux appliquer la réduction et simplement la changer. sans parler du fait que tu va affecter les valeur '5%', '10%' et '15%' directement au prix conserné.
donc si jamais, par chance (?), une condition passe $value[‘data’]->price aura pour valeur '5%', '10%' ou '15%' et non le prix remisé.
pour calculer une réduction de prix en pourcentage le plus simple c'est de multiplier par (100 - reduction)/100
Pour une réduction de 5% on multiplie par 0.95.
et la entre un opérateur surement peux connue *= qui va te faire la multiplication a partir de l'opérande de gauche et lui affecter le résultat
$a = 100;
$a *=0.95;
var_dump($a);// affiche float 95
si tu fais un truc pas mal tu peux aussi réduire ton code
tu peux passer ton code à 5 lignes (on peux en enlever une mais bon c'est un poil moins performant et lisible
$reduc = ['klett'=>0.95,'cornelsen'=>0.9,'hueber'=>0.85];
foreach ( $cart_object->cart_contents as $key => $value ) {
$s = strtolower($value[‘variation’]);
if(in_array(array_keys($reduc),$s)){
$value[‘data’]->price *= $reduc[$s];
}
}
10 lignes de gagné (si j'enlève les espace sinon 26 lignes) c'est plus claire et il y a moins de source d'erreur possible. Tu peux ajouter une réduction sur une catégorie de façon simple etc.
je te conseil aussi de rendre facilement configurable les réductions, sauf si tu veux te faire payer une presta à chaque fois qu'il faut modifier un prix.
ah bien sur ce code ne fonction que si variation n'est pas un tableau (sinon c'est un poil plus complexe, et je ne pense pas que cela aussi simple au coté règle métier).
@+