- WordPress :5.8
- Statut : non résolu
- Ce sujet contient 4 réponses, 2 participants et a été mis à jour pour la dernière fois par
mathweb33000, le il y a 2 années et 1 mois.
-
AuteurMessages
-
6 octobre 2021 à 0 h 49 min #2386680
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 : ApacheProblè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 ?
7 octobre 2021 à 7 h 59 min #2386740Bonjour,
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
7 octobre 2021 à 19 h 12 min #2386800Il 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.
7 octobre 2021 à 22 h 25 min #2386821Voilà 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) {';
8 octobre 2021 à 10 h 54 min #2386850Bonjour.
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.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.