WooFrance Dépannage et support WordPress WooCommerce › Forums › How to WooCommerce › [URGENT] Utilisation particulière de Woocommerce
- Ce sujet contient 1 réponse, 1 participant et a été mis à jour pour la dernière fois par
Kurina, le il y a 4 années et 6 mois.
-
AuteurMessages
-
19 novembre 2020 à 14 h 18 min #201994
Bon, je crois que j’ai trouvé la solution. Pour ceux que ça intéresse, j’ai donc créé un formulaire simple qui liste mes différentes options. A la validation du formulaire (action= » »), j’insère mes données en session, j’ajoute un produit (que j’ai créé en administration, avec un coût de 0€) et je redirige l’utilisateur vers le checkout.
<span style="color: #cc7832; background-color: #232525; font-weight: bold;">if</span><span style="background-color: #232525;">(</span><span style="color: #cc7832; background-color: #232525; font-weight: bold;">isset</span><span style="background-color: #232525;">(</span><span style="color: #9876aa; background-color: #232525;">$_POST</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'submit'</span><span style="background-color: #232525;">])){ </span> <span style="color: #9876aa; background-color: #232525;">$_SESSION</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'commande'</span><span style="background-color: #232525;">] = </span><span style="color: #cc7832; background-color: #232525; font-weight: bold;">array</span><span style="background-color: #232525;">( </span> <span style="color: #6a8759; background-color: #232525;">'supplement_adresse' </span><span style="background-color: #232525;">=> </span><span style="color: #9876aa; background-color: #232525;">$_POST</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'adresse'</span><span style="background-color: #232525;">]</span><span style="color: #cc7832; background-color: #232525;">, </span> <span style="color: #6a8759; background-color: #232525;">'supplement_montant' </span><span style="background-color: #232525;">=> </span><span style="color: #9876aa; background-color: #232525;">$_POST</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'montant'</span><span style="background-color: #232525;">] </span><span style="background-color: #232525;"> )</span><span style="color: #cc7832; background-color: #232525;">; </span> <span style="background-color: #232525;">WC()-></span><span style="color: #9876aa; background-color: #232525;">cart</span><span style="background-color: #232525;">-></span><span style="color: #ffc66d; background-color: #232525;">add_to_cart</span><span style="background-color: #232525;">( </span><span style="color: #6897bb; background-color: #232525;">21 </span><span style="background-color: #232525;">)</span><span style="color: #cc7832; background-color: #232525;">; </span> <span style="color: #9876aa; background-color: #232525;">$url </span><span style="background-color: #232525;">= wc_get_checkout_url()</span><span style="color: #cc7832; background-color: #232525;">;</span><span style="color: #808080; background-color: #232525;"> </span> <span style="background-color: #232525;">wp_redirect(</span><span style="color: #9876aa; background-color: #232525;">$url</span><span style="background-color: #232525;">)</span><span style="color: #cc7832; background-color: #232525;">; </span> <span style="color: #cc7832; background-color: #232525; font-weight: bold;">exit</span><span style="color: #cc7832; background-color: #232525;">; </span><span style="background-color: #232525;">}</span>
Ensuite dans functions.php, j’ai mis de quoi gérer l’ouverture de la session :
<span style="background-color: #232525;"> </span><span style="background-color: #232525;">ob_clean()</span><span style="color: #cc7832; background-color: #232525;">; </span><span style="background-color: #232525;">ob_start()</span><span style="color: #cc7832; background-color: #232525;">;</span>
<span style="color: #cc7832; background-color: #232525; font-weight: bold;">function </span><span style="color: #ffc66d; background-color: #232525;">usea_session_start</span><span style="background-color: #232525;">() { </span> <span style="color: #cc7832; background-color: #232525; font-weight: bold;">if </span><span style="background-color: #232525;">( ! session_id() ) { </span><span style="background-color: #232525;"> @session_start()</span><span style="color: #cc7832; background-color: #232525;">; </span> <span style="background-color: #232525;">} </span><span style="background-color: #232525;">} </span><span style="background-color: #232525;">add_action( </span><span style="color: #6a8759; background-color: #232525;">'init'</span><span style="color: #cc7832; background-color: #232525;">, </span><span style="color: #6a8759; background-color: #232525;">'usea_session_start'</span><span style="color: #cc7832; background-color: #232525;">, </span><span style="color: #6897bb; background-color: #232525;">9999 </span><span style="background-color: #232525;">)</span><span style="color: #cc7832; background-color: #232525;">;</span>
Et surtout, cette partie, qui altère le prix dans le panier en ajoutant mes différentes variables mises précédemment en session.
<span style="color: #808080; background-color: #232525;">//Modifie le prix sur le panier </span><span style="background-color: #232525;">add_action( </span><span style="color: #6a8759; background-color: #232525;">'woocommerce_before_calculate_totals'</span><span style="color: #cc7832; background-color: #232525;">, </span><span style="color: #6a8759; background-color: #232525;">'alter_price_cart'</span><span style="color: #cc7832; background-color: #232525;">, </span><span style="color: #6897bb; background-color: #232525;">9998 </span><span style="background-color: #232525;">)</span><span style="color: #cc7832; background-color: #232525;">; </span><span style="color: #cc7832; background-color: #232525;"> </span><span style="color: #cc7832; background-color: #232525; font-weight: bold;">function </span><span style="color: #ffc66d; background-color: #232525;">alter_price_cart</span><span style="background-color: #232525;">( </span><span style="color: #9876aa; background-color: #232525;">$cart </span><span style="background-color: #232525;">) { </span><span style="background-color: #232525;"> </span> <span style="color: #cc7832; background-color: #232525; font-weight: bold;">foreach </span><span style="background-color: #232525;">( </span><span style="color: #9876aa; background-color: #232525;">$cart</span><span style="background-color: #232525;">-></span><span style="color: #ffc66d; background-color: #232525;">get_cart</span><span style="background-color: #232525;">() </span><span style="color: #cc7832; background-color: #232525; font-weight: bold;">as </span><span style="color: #9876aa; background-color: #232525;">$cart_item_key </span><span style="background-color: #232525;">=> </span><span style="color: #9876aa; background-color: #232525;">$cart_item </span><span style="background-color: #232525;">) { </span> <span style="color: #9876aa; background-color: #232525;">$product </span><span style="background-color: #232525;">= </span><span style="color: #9876aa; background-color: #232525;">$cart_item</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'data'</span><span style="background-color: #232525;">]</span><span style="color: #cc7832; background-color: #232525;">; </span> <span style="color: #9876aa; background-color: #232525;">$price </span><span style="background-color: #232525;">= </span><span style="color: #9876aa; background-color: #232525;">$product</span><span style="background-color: #232525;">-></span><span style="color: #ffc66d; background-color: #232525;">get_price</span><span style="background-color: #232525;">()</span><span style="color: #cc7832; background-color: #232525;">; </span><span style="color: #808080; background-color: #232525;">// d($_SESSION); </span> <span style="color: #9876aa; background-color: #232525;">$nouveau_prix </span><span style="background-color: #232525;">= </span><span style="color: #9876aa; background-color: #232525;">$_SESSION</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'commande'</span><span style="background-color: #232525;">][</span><span style="color: #6a8759; background-color: #232525;">'supplement_adresse'</span><span style="background-color: #232525;">] + </span><span style="color: #9876aa; background-color: #232525;">$_SESSION</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'commande'</span><span style="background-color: #232525;">][</span><span style="color: #6a8759; background-color: #232525;">'supplement_montant'</span><span style="background-color: #232525;">]</span><span style="color: #cc7832; background-color: #232525;">; </span><span style="color: #cc7832; background-color: #232525;"> </span> <span style="color: #9876aa; background-color: #232525;">$cart_item</span><span style="background-color: #232525;">[</span><span style="color: #6a8759; background-color: #232525;">'data'</span><span style="background-color: #232525;">]-></span><span style="color: #ffc66d; background-color: #232525;">set_price</span><span style="background-color: #232525;">( </span><span style="color: #9876aa; background-color: #232525;">$price </span><span style="background-color: #232525;">+ </span><span style="color: #9876aa; background-color: #232525;">$nouveau_prix </span><span style="background-color: #232525;">)</span><span style="color: #cc7832; background-color: #232525;">; </span> <span style="background-color: #232525;">} </span><span style="background-color: #232525;">}</span>
Je ne sais pas si c’est propre, si c’est ce qu’il faut faire, car je ne fais pas souvent de back, mais en tout cas ça marche. J’ai fait les tests, la commande est bien validée et insérée sur Woocommerce !
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.