


Mettre en œuvre des suppléments cumulatifs en fonction du regroupement d'identification du produit dans le panier WooCommerce
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:
- Obtenez l'ID du produit et la quantité de l'article actuel de panier.
- Itérer sur le tableau des paramètres $ et trouvez l'ID de produit correspondant.
- 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
- 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.
- 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.
- 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'];.
- 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.
- 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.
- 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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

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

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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

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

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

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.

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

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

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