[RESOLU] [Woocommerce][Wordpress] ajouter réduction de prix automatique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] [Woocommerce][Wordpress] ajouter réduction de prix automatique

Re: [Woocommerce][Wordpress] ajouter réduction de prix automatique

par moogli » 22 mars 2017, 09:55

si cela répond à ta question peut tu marquer le sujet comme "résolus" ? (bouton a gauche du titre).

@+

Re: [Woocommerce][Wordpress] ajouter réduction de prix automatique

par gret » 21 mars 2017, 18:16

Merci beaucoup pour tes corrections et tes explications. :D
Cela me donne une bonne base pour poursuivre.

Re: [Woocommerce][Wordpress] ajouter réduction de prix automatique

par moogli » 21 mars 2017, 12:21

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).

@+

[Woocommerce][Wordpress] ajouter réduction de prix automatique

par gret » 21 mars 2017, 11:56

Bonjour,

Un client me demande de modifier son code PHP de Woocommerce sur Wordpress avec le theme Flatsome
Il souhaiterait accorder des remises automatiques sur le prix en fonction d'une ou plusieurs catégories choisies
J'ai donc préparé ce code:

Code : Tout sélectionner

<?php /** * Flatsome functions and definitions * * @package flatsome */ require get_template_directory() . '/inc/init.php'; /** * Note: It's not recommended to add any custom code here. Please use a child theme so that your customizations aren't lost during updates. * Learn more here: http://codex.wordpress.org/Child_Themes */ // Override du panier add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' ); function add_custom_price( $cart_object ) { $custom_price = 5%; $custom_price2 = 10%; $custom_price3 = 15%; $klett = array ( 'klett', 'Klett' ); $cornelsen = array ( ‘cornelsen’, ‘Cornelsen’ ); $hueber = array ( ‘hueber’, ‘Hueber’ ); foreach ( $cart_object->cart_contents as $key => $value ) { if (array_intersect($klett, $value[‘variation’])) { $value[‘data’]->price = $custom_price; } elseif (array_intersect($cornelsen, $value[‘variation’])) { $value[‘data’]->price = $custom_price2; } elseif (array_intersect($hueber, $value[‘variation’])) { $value[‘data’]->price = $custom_price2; } } } // Fin override du panier ?>
Mon problème est le suivant quand j'intègre le code je n'ai pas le résultat escompté
Pourriez vous me donner un petit coup de pouce car oui je débute en php et ne suis pas très douée.
Merci à vous