WooFrance Dépannage et support WordPress WooCommerce Forums How to WooCommerce [URGENT] Utilisation particulière de Woocommerce

Affichage de 1 message (sur 1 au total)
  • Auteur
    Messages
  • #201994
    Kurina
    Participant
    Points: 13 pts

    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 !

     

    ====================
    depanagewp
    vpsa2
Affichage de 1 message (sur 1 au total)
  • Vous devez être connecté pour répondre à ce sujet.