Table des matières
Aperçu
Analyse des problèmes de base
Accumuler un supplément de panier
1. Définir les réglages de frais
2. Traverser le contenu du panier et accumuler des frais
3. Ajouter les frais accumulés au chariot
Exemple de code complet
Notes et meilleures pratiques
Résumer
Maison développement back-end tutoriel php Mettre en œuvre des suppléments cumulatifs en fonction du regroupement d'identification du produit dans le panier WooCommerce

Mettre en œuvre des suppléments cumulatifs en fonction du regroupement d'identification du produit dans le panier WooCommerce

Sep 23, 2025 pm 04:57 PM

Mettre en œuvre des suppléments cumulatifs en fonction du regroupement d'identification du produit dans le panier WooCommerce

Ce tutoriel est conçu pour expliquer en détail comment calculer et accumuler dynamiquement des frais supplémentaires pour un groupe d'identité de produit spécifique dans le panier WooCommerce, tout en tenant compte de la quantité de produit. En construisant un tableau de configuration flexible et une logique de traitement en deux étapes, nous nous assurerons que les frais supplémentaires sont correctement agrégés lorsque le panier contient plusieurs produits appartenant à la même catégorie de frais, évitant ainsi des affichages répétés ou des erreurs de calcul.

Aperçu

Dans les opérations de magasin WooCommerce, les frais supplémentaires sont souvent facturés en fonction d'un produit ou d'un groupe de produits spécifiques, tels que des frais de service, des frais d'emballage ou des frais de traitement spécifiques. Cependant, lorsque le panier contient plusieurs produits qui appartiennent à la même catégorie de frais, l'ajout de frais fixes à chaque produit peut entraîner des calculs répétés des frais ou une incapacité à s'accumuler correctement. Ce didacticiel introduira une méthode robuste pour réaliser une accumulation intelligente de surcharges de chariots d'achat via un code personnalisé pour garantir la précision et la flexibilité des calculs de frais.

Analyse des problèmes de base

Le problème d'origine est d'essayer d'utiliser la fonction __ () pour définir plusieurs ID de produit, ce qui est un malentendu courant. La fonction __ () est principalement utilisée dans WordPress pour l'internationalisation (traduction) des chaînes, plutôt que de traiter plusieurs éléments de données. La bonne façon consiste à définir plusieurs ID de produit comme un tableau pour une correspondance et un traitement efficaces dans le code. De plus, afin d'atteindre l'accumulation de dépenses, nous avons besoin d'un mécanisme pour suivre le montant total de chaque catégorie de dépenses.

Accumuler un supplément de panier

Nous injecterons une logique personnalisée via le crochet woocommerce_cart_calculate_fees qui nous permet d'ajouter ou de modifier les frais pendant la phase de calcul des frais de panier.

1. Définir les réglages de frais

Tout d'abord, nous avons besoin d'une structure claire pour définir différentes catégories de surtaxe. Chaque catégorie doit inclure:

  • Product_id: une gamme d'identifices de produit qui indiquent quels produits entrent dans cette catégorie de coûts.
  • Montant: le montant des frais supplémentaires pour un seul produit (ou par unité de produit).
  • Nom: le nom d'affichage des frais supplémentaires.
  • Total_amount: Le compteur utilisé pour accumuler le montant total de cette catégorie de frais, la valeur initiale doit être 0.

Exemple de structure de configuration:

 // Paramètres (plusieurs tableaux de paramètres peuvent être ajoutés / supprimés si vous le souhaitez)
$ paramètres = array (
    tableau(
        'product_id' => array (30, 813, 815), // Array d'identification de produit 'Mult' => 5, // Coût de produit unique 'name' => __ ('Frais de service supplémentaires', 'WooCommerce'), // Nom des frais 'Total_amount' => 0, // Accumulateur, initialement 0
    ),
    tableau(
        'product_id' => array (817, 819, 820),
        'montant' => 25,
        'name' => __ («Frais d'emballage», «WooCommerce»),
        'total_amount' => 0,
    ),
    tableau(
        'product_id' => array (825),
        'montant' => 100,
        'name' => __ ('un autre frais', 'WooCommerce'),
        'total_amount' => 0,
    ),
));

2. Traverser le contenu du panier et accumuler des frais

Ensuite, nous devons parcourir chaque élément du chariot. Pour chaque article, nous vérifions si son identifiant relève d'une catégorie de frais définis. S'il correspond, il est accumulé au total_amount de la catégorie de coût correspondante en fonction de la quantité du produit et du montant défini.

Logique de traitement:

  1. Obtenez l'ID du produit et la quantité de l'article actuel de panier.
  2. Itérer sur le tableau des paramètres $ et trouvez l'ID de produit correspondant.
  3. Si une correspondance est trouvée, multipliez le montant par la quantité d'article et ajoutez-le au total_amount de la catégorie des frais.

Extrait de code:

 // Boucle à travers le contenu du panier
foreach ($ cart-> get_cart_contents () comme $ cart_item) {      
    // Obtenez un identifiant de produit
    $ product_id = $ cart_item ['product_id'];

    // Obtenez la quantité
    $ quantité = $ cart_item ['quantité']; // Considérons la quantité de produits // Arrivée des paramètres de creux de boucle (déterminer le montant total)
    foreach ($ Paramètres comme $ key => $ Setting) {
        // Recherche de l'ID de produit
        if (in_array ($ product_id, $ paramètres [$ key] ['product_id'])) {
            // Ajout: Montant * Quantité
            $ Paramètres [$ key] ['total_amount'] = $ setting ['montant'] * $ quantité;
        }
    }       
}

3. Ajouter les frais accumulés au chariot

Une fois la traversée des articles de panier terminée, le total_amount de chaque catégorie de frais dans le tableau des paramètres $ contiendra les frais totaux qui devraient être facturés. La dernière étape consiste à itérer le tableau de paramètres $ mis à jour et à ajouter tout le total_amount supérieur à zéro au panier en tant que frais supplémentaires.

Extrait de code:

 // Array de paramètres de creux de boucle (sortie)
ForEach ($ Paramètres comme $ Setting) {
    // supérieur à 0
    if ($ setting ['total_amount']> 0) {
        // ajouter des frais (nom, montant, taxable)
        $ cart-> add_fee ($ setting ['name'], $ setting ['total_amount'], false);    
    }
}

Exemple de code complet

Intégrez la logique ci-dessus dans une fonction WooCommerce Hook, généralement placée dans le fichier Functions.PHP du thème ou le plugin personnalisé.

 / **
 * Ajoutez des frais supplémentaires à des groupes d'identification de produit spécifiques dans le panier WooCommerce.
 *
 * @param wc_cart $ CART WOOCOMMERCE CART OBJET.
 * /
fonction action_woocommerce_cart_calculate_fees ($ cart) {
    // uniquement exécuté sur les demandes frontales ou ajax pour éviter les conflits d'interface de gestion de fond if (is_admin () &&! Définis ('dait_ajax')) {
        retour;
    }

    // Paramètres de frais: Chaque tableau définit une catégorie de frais // 'product_id' contient tous les ID de produit (formulaire de tableau) dans cette catégorie de frais
    // «Montant» est la charge d'un seul produit (ou par unité) // «Nom» est le nom de charge affiché dans le panier // «Total_amount» est un accumulateur qui calcule le montant total de la catégorie des frais, avec une valeur initiale de 0
    $ paramètres = array (
        tableau(
            'product_id' => Array (30, 813, 815), // Par exemple: ID de produit 30, 813, 815 est un "supplément"
            'montant' => 5,
            'name' => __ («Frais de service supplémentaires», «WooCommerce»),
            'total_amount' => 0,
        ),
        tableau(
            'product_id' => array (817, 819, 820), // par exemple: ID de produit 817, 819, 820 est un "frais d'emballage"
            'montant' => 25,
            'name' => __ («Frais d'emballage», «WooCommerce»),
            'total_amount' => 0,
        ),
        tableau(
            'product_id' => array (825), // par exemple: l'ID de produit 825 appartient à "autres frais"
            'montant' => 100,
            'name' => __ ('un autre frais', 'WooCommerce'),
            'total_amount' => 0,
        ),
    ));

    // Étape 1: Traversez le contenu du panier et accumulez le montant total de chaque catégorie de frais ForEach ($ cart-> get_cart_contents () comme $ cart_item) {      
        $ product_id = $ cart_item ['product_id']; // Obtenez l'ID du produit du produit de panier
        $ quantité = $ cart_item ['quantité']; // Obtenez la quantité d'articles de panier // Traversé tous les paramètres de coût et vérifiez si l'article de panier actuel appartient à une certaine catégorie de frais ForEach ($ Paramètres comme $ key => $ Setting) {
            // Si l'ID de produit du produit de panier actuel est dans le tableau Product_id d'une certaine catégorie de frais si (in_array ($ product_id, $ paramètres [$ key] ['product_id'])) {
                // Ajouter le montant total de cette catégorie de frais, compte tenu de la quantité de produit $ paramètres [$ key] ['total_amount'] = $ setting ['montant'] * $ quantité;
            }
        }       
    }

    // Étape 2: Traverser les paramètres de frais mis à jour et l'ajout des frais totaux accumulés au panier foreach ($ Paramètres comme $ Setting) {
        // ajouter if ($ setting ['total_amount']> 0) {
            // Utilisez la méthode add_fee pour ajouter les frais au panier // paramètres: nom des frais, montant des frais, qu'il soit imposable (faux signifie non imposable)
            $ cart-> add_fee ($ setting ['name'], $ setting ['total_amount'], false);    
        }
    }
}
add_action ('woocommerce_cart_calculate_fees', 'Action_wooCommerce_cart_calculate_fees', 10, 1);

Notes et meilleures pratiques

  1. Placement de code: il est recommandé d'ajouter ce code au fichier functions.php du thème enfant ou de l'implémenter via un plugin personnalisé. La modification du fichier de thème parent peut perdre des modifications lorsque le thème est mis à jour.
  2. Ce que fait total_amount: le champ total_amount est crucial dans le tableau des paramètres $, qui agit comme un accumulateur pour suivre le montant total de chaque catégorie de frais lors de l'itération du panier. Ne modifiez jamais d'autres objectifs autres que sa valeur initiale.
  3. Examen de la quantité de produit: le code fourni a pris en compte la quantité de produit ($ Setting ['Montant'] * $ Quantité;). Si votre supplément ne doit pas être affecté par la quantité du produit (c'est-à-dire que les frais sont facturés une fois quel que soit le nombre que vous achetez), supprimez la quantité $ = $ cart_item ['Quantité']; Ligne et modification $ Setting ['Montant'] * $ Quantité; à $ Setting ['Montant'];.
  4. Maintenabilité: Gérer les paramètres de dépenses de manière centralisée pour faciliter l'addition, la modification ou la suppression des catégories de frais à l'avenir.
  5. Paramètres fiscaux: Le troisième paramètre de la fonction add_fee () contrôle si les frais sont imposables. Défini sur False dans l'exemple, signifie qu'il n'est pas imposable. Ajustez-vous aux besoins de votre entreprise.
  6. Gestion des erreurs et débogage: Dans un environnement de développement, vous pouvez utiliser error_log () ou var_dump () pour déboguer les variables pour garantir que la logique est correcte.

Résumer

Avec les didacticiels ci-dessus, vous devriez maintenant être en mesure de mettre en œuvre de manière flexible les surcharges cumulatives en fonction du regroupement d'identification du produit dans le panier WooCommerce. Cette approche résout non seulement le problème de l'accumulation de coûts lorsque plusieurs produits appartiennent à la même catégorie de coûts, mais offrent également des options pour considérer le nombre de produits, améliorant considérablement les capacités de gestion des coûts des magasins WooCommerce. Suivre ces étapes et les meilleures pratiques garantit que votre logique de frais personnalisée est stable et facile à entretenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment vérifier si une adresse e-mail est valide en PHP? Comment vérifier si une adresse e-mail est valide en PHP? Sep 21, 2025 am 04:07 AM

Usefilter_var () tovalidateemailsyntaxandcheckdnsrr () toverifydomainmxrecords.example: $ email = "user@example.com"; if (f ilter_var ($ e-mail, filter_validate_email) && checkdnsrr (explosage ('@', $ e-mail) [1], 'mx')) {echo "ValidAndDeliverableMail & Qu

Comment faire une copie profonde ou un clone d'un objet en PHP? Comment faire une copie profonde ou un clone d'un objet en PHP? Sep 21, 2025 am 12:30 AM

UseUnserialize (serialize ($ obj)) FordopcopyingwhenallDataisSerializable; Sinon, implémentez__Clone () TomanuallyDuplicatesedObjectsAndavoidSharedReferences.

Comment fusionner deux tableaux en php? Comment fusionner deux tableaux en php? Sep 21, 2025 am 12:26 AM

UseArray_merge () toCombineArrays, écrasant leduplicatestringKeysAndreIndexingNumericKeys; ForsimplecCaTencatenation, en particulierInphp5.6, usethesplatoperator [... $ array1, ... $ array2].

Comment utiliser des espaces de noms dans un projet PHP? Comment utiliser des espaces de noms dans un projet PHP? Sep 21, 2025 am 01:28 AM

NamespacesInphporganizEcodeAndPreventnamingConflictsBygroupingClasses, Interfaces, Functions et ConstantsunSunSaspecificName.2.DefineanamespaceusingTheNamesPaceSpaceKeyWordAtTopofaFile, suiviByTheNamesPacename, Suchasapp \ Controlers...USUSEUSEKEYWORDTOI

MySQL Aggrégation conditionnelle: Instruction de cas d'utilisation pour mettre en œuvre le résumé de la condition et le comptage des champs MySQL Aggrégation conditionnelle: Instruction de cas d'utilisation pour mettre en œuvre le résumé de la condition et le comptage des champs Sep 16, 2025 pm 02:39 PM

Cet article explique en profondeur comment utiliser les instructions de cas pour effectuer une agrégation conditionnelle dans MySQL pour atteindre la sommation conditionnelle et le comptage de champs spécifiques. Grâce à un cas de système d'abonnement pratique, il montre comment calculer dynamiquement la durée totale et le nombre d'événements en fonction de l'état des enregistrements (tels que "end" et "annuler"), surmontant ainsi les limites des fonctions de somme traditionnelles qui ne peuvent pas répondre aux besoins d'une agrégation conditionnelle complexe. Le tutoriel analyse en détail l'application des instructions de cas en détail et souligne l'importance de la fusion lorsqu'il s'agit des valeurs nulles possibles de la jointure gauche.

Quelles sont les méthodes magiques en PHP et fournissent un exemple de `__Call () 'et` __get ()'. Quelles sont les méthodes magiques en PHP et fournissent un exemple de `__Call () 'et` __get ()'. Sep 20, 2025 am 12:50 AM

La méthodiette () méthodiste axée sur le point de réviser la mise en œuvre de l'inscription, ce qui permet de faire de la maintenance à la qualité de qualité et

Comment mettre à jour un enregistrement dans une base de données avec PHP? Comment mettre à jour un enregistrement dans une base de données avec PHP? Sep 21, 2025 am 04:47 AM

ToupDateAdatabasereCorDinPhp, FirstConnectUsingPDoOrmysQLi, theNusepreparedStationStoExECUSEASECURSQLUPDATEQUERY.example: $ pdo = newPDO ("MySql: host = localhost; dbname = votre_database", $ username, $ mot de passe); $ sql = "dameussem =.

Comment obtenir l'extension de fichier en php? Comment obtenir l'extension de fichier en php? Sep 20, 2025 am 05:11 AM

UsePathinfo ($ nom de fichier, pathinfo_extension) togetThefileExtension; itreliabblyHandlesMultipledototsEdGasases, renvoyantTheExtension (par exemple, "pdf") oranemptystringefNoneExists.

See all articles