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

2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #201985
    Kurina
    Participant
    Points: 13 pts

    Bonjour à tous,

    J’ai eu l’occasion de réaliser des sites sur Woocommerce, mais j’ai un client qui a une demande particulière. L’idée c’est de proposer de la livraison à domicile pour une certaine enseigne (je n’en dis pas plus, car il tient à être discret…Rien d’illégal je vous rassure). Il ne vend aucun produit, il vend juste le service de livraison entre des magasins et des clients.

    Il faudrait donc que le visiteur puisse choisir son magasin parmi une liste déroulante “Magasins”.

    Selon son choix, une seconde liste déroulante apparaît avec une liste de codes postaux dédiés au magasin choisi, dont le choix peut influer sur le prix (31001 : 0€, 31002 : +5€…).

    Ensuite il y aura différentes options qui influeront sur le prix également (4ème étage ou plus : +5€…).

     

    Bon, en soi, le formulaire pour ça je sais le faire. Je peux également faire un contenu (via Advanced Custom Fields par exemple) pour chaque magasin, où je rattacherai les codes postaux où on peut livrer.

     

    Ma question est la suivante : comment rattacher ça à Woocommerce ? Parce que ce serait pratique de profiter de Woocommerce pour la gestion du panier, l’inscription/connexion des utilisateurs, les factures, l’envoi d’emails etc.

     

    Je sais que c’est particulier comme demande, mais je dois faire un devis ce matin et je ne sais pas encore si je suis capable de faire ce projet ou non. Je suis développeur front depuis 8-9 ans, mais j’ai de bonnes connaissances en back aussi, donc ça pourrait être jouable s’il existe un moyen pas trop compliqué de faire ça…

     

    Merci pour votre aide !

    depanagewp
    #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
2 sujets de 1 à 2 (sur un total de 2)
  • Vous devez être connecté pour répondre à ce sujet.