Livraison en Point Relais sauf si certains articles sont dans le panier (Créer un compte)

  • WordPress :5.8
  • Statut : non résolu
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #2386680
    mathweb33000
    Participant
    Padawan WordPress
    79 contributions

    Bonjour,

    Ma configuration WP actuelle :
    – Version de WordPress : 5.8.1
    – Version de PHP/MySQL : 7.4.21 / 5.6.50
    – Thème utilisé : Bluestreet
    – Thème URI : https://webriti.com/bluestreet-child-version-details-page/
    – Extensions en place : amr shortcode any widget (4.0), Checkout Field Editor for WooCommerce (1.4.9), Classic Editor (1.6.2), Complianz | GDPR/CCPA Cookie Consent (5.5.1), Contact Form 7 (5.4.2), Contextual Related Posts (3.0.7), Disable auto-update Email Notifications (1.3.0), Easy FancyBox (1.8.18), Email Templates (1.3.2.1), Email Users (4.8.8), Enlighter – Customizable Syntax Highlighter (4.4.2), Forum_wordpress_fr (4.2), Google Analyticator (6.5.4), iThemes Security (8.0.2), MathJax-LaTeX (1.3.11), Mathweb (1.0), Menu In Post (1.1.8), Nested Ordered Lists (1.2.0), Post Type Switcher (3.2.1), Redirect 404 Error Page to Homepage or Custom Page (1.7.9), SiteOrigin CSS (1.3.2), Stripe For WooCommerce (3.3.10), Ultimate Member (2.2.5), UpdraftPlus – Backup/Restore (1.16.62), Webriti Companion (1.8.5), WooCommerce (5.7.1), Woody code snippets (PHP snippets | Insert PHP) (2.4.2), WP-CGV (1.0.7), WP Add Mime Types (3.0.0), WP Cerber Security, Anti-spam & Malware Scan (8.9.3), WPS Hide Login (1.8.6), Yoast SEO (17.3)
    – Adresse du site : https://www.mathweb.fr/euclide
    – Nom de l’hébergeur : Apache

     

    Problème(s) rencontré(s) : Bonjour. Voici mon problème (en mode simplifié)…

    J’ai deux catégories A et B de produits. Je voudrais proposer une livraison en point relais pour les produits de la catégorie B sauf si sont présents des produits de la catégorie A dans mon panier (auquel cas j’aimerais que cette option ne figure pas). Mais je ne vois pas comment faire.

    J’ai deux modes d’expédition : « Livraison en point relais » et « Livraison à domicile ». Mais ils s’affichent quels que soient les articles dans le panier. J’ai tenté de regarder du côté des classes d’expédition, mais je n’y ai pas compris grand-chose. J’ai bien défini deux classes d’expédition « Point Relais » et « Domicile » mais après… je suis largué!

    Existe-t-il seulement un moyen d’afficher un mode d’expédition si et seulement si une catégorie de produits n’est pas présente dans le panier ?

    #2386740
    Rock4Temps
    Participant
    Maître WordPress
    862 contributions

    Bonjour,

    A mon avis les réglages de Woocommerce ne permettent pas de répondre à votre demande qui est bien spécifique.

    Il faut un peu de code php via un hook Woocommerce pour résoudre votre problème.

    Quel mode d’expédition souhaitez vous si et seulement si une catégorie de produits n’est pas présente dans le panier ?

    Je vais regarder, si je trouve une solution simple je viendrais poster le code.

    Bonne journée

    #2386800
    mathweb33000
    Participant
    Padawan WordPress
    79 contributions

    Il m’est aussi d’avis que woocommerce ne permet pas nativement de faire cela. En fait, le schéma serait le suivant:

    • si un produit de la catégorie A apparaît dans le panier, pas d’option « Point relais » en mode de livraison;
    • si uniquement un ou plusieurs produits de la catégorie B apparaissent dans le panier, l’option « Point relais » est proposée en plus des autres.

    Mais ce serait l’idéal… Sinon, ce n’est pas grave… Il ne faut pas non plus se prendre la tête.

    En tout cas, c’est gentil de se pencher sur ce problème.

    #2386821
    Rock4Temps
    Participant
    Maître WordPress
    862 contributions

    Voilà ce code fonctionne sur mon site de test

    add_filter( 'woocommerce_cart_item_name', 'ecos_find_category_in_cart', 10,3 );


    function ecos_find_category_in_cart( $name, $cart_item, $cart_item_key ) {

    $product = $cart_item['data'];

    // la catégorie retourné pour un produit variable est vide
    // il faut retouner la catégorie du parent
    if ( $product->is_type( 'variation' ) ) {
    $product = wc_get_product( $product->get_parent_id() );
    }

    // on renvoi dans un tableau toutes les id de catégories
    // des articles présent dans le panier
    $cat_ids = $product->get_category_ids();

    // afficher les ID des catégories
    //echo '<pre>'; print_r( $cat_ids ); echo '</pre>';

    // si la catégorie ID = 27 est présente dans le panier
    if ( in_array("27", $cat_ids) ) {

    echo'<style>';

    /*--------------- on masque la 2ème méthode d'expédition dans la liste ------------------*/

    echo'.woocommerce-shipping-methods li:nth-child(2) {';
    echo'display:none;';
    echo'}';


    echo'</style>';

    }


    }

    J’ai mis une ligne en commentaire dans le code que vous pouvez décommenter
    pour afficher directement dans la table du panier l’ID pour les catégories de produit.

    Vous pouvez aussi  voir l’ID catégorie de produit en back office: menu Produit/catégories.
    Ensuite vous cliquez sur modifier pour votre catégorie A et dans l’URL de la barre d’adresse
    du navigateur  vous avez quelque chose comme:  product_cat&tag_ID=25
    Dans cette exemple l’id de catégorie est égale a 25.

    il vous faudra modifier cette ligne de code selon l’ID  de la catégorie A

    // si la catégorie ID = 27 est présente dans le panier 
    if ( in_array("27", $cat_ids) ) {

    Selon la position dans la liste des méthode d’expédition de la méthode: Point Relais
    il vous faudra modifier cette ligne de code en remplaçant
    nth-child(2) par nth-child(1) ou nth-child(3) respectivement si  le point Relais
    est la 1ère ou 3ème méthode d’expédition etc..

    echo'.woocommerce-shipping-methods li:nth-child(2) {';

    #2386850
    mathweb33000
    Participant
    Padawan WordPress
    79 contributions

    Bonjour.

    Je vais tester cela dès que possible et ne manquerai pas de revenir vers vous pour vous donner l’issue de l’expérience.

    Merci beaucoup.

5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.