Comment ajouter une méthode d'expédition personnalisée dans WooCommerce
Publié: 2020-09-01Si vous connaissez WooCommerce, vous savez qu'il s'agit d'une excellente solution de commerce électronique gratuite, dotée d'un ensemble de fonctionnalités incroyablement utiles. Ce qui ressort, c'est que WooCommerce est développé dans un souci d'extensibilité, similaire à la modularité de WordPress.
Cependant, si vous avez besoin de quelque chose de plus de WooCommerce, vous constaterez souvent que WooCommerce ne vous donne pas tout ce dont vous avez besoin, par exemple, si vous souhaitez ajouter une méthode d'expédition personnalisée. Néanmoins, ne vous inquiétez pas car dans ce bref tutoriel, vous apprendrez à créer une méthode d'expédition simple pour WooCommerce, qui calculera le coût d'expédition.
De plus, vous apprendrez comment ajouter des restrictions à notre plugin afin que la méthode d'expédition soit disponible pour certains pays.
Règles d'expédition personnalisées pour les méthodes d'expédition
Dans cette section, nous allons créer des règles d'expédition personnalisées pour les méthodes d'expédition que nous allons utiliser pour créer le code. Nous définirons comment la méthode d'expédition calculera le coût et où elle peut être expédiée. Cela signifie que le coût sera déterminé par le poids et la zone dans laquelle nous devons expédier.
Pour cet exemple, nous expédierons aux États-Unis, au Canada, en Allemagne, au Royaume-Uni, en Italie, en Espagne et au Kenya. Le Kenya sera notre Zone 0 pour 10 $, l'Italie Zone 1 pour 30 $, l'Espagne Zone 2 pour 50 $, le Royaume-Uni Zone 2 pour 50 $, les États-Unis et le Canada Zone 3 pour 70 $.
Pour le poids, nous les fixerons comme suit : 0 à 10 kg gratuits, 11 à 30 kg pour 5 $, 31 à 50 kg pour 10 $ et 51 à 100 kg pour 20 $.
Vous êtes peut-être prêt à commencer à coder, mais pas encore ! Tout d'abord, vous devez en savoir plus sur l' API d'expédition WooCommerce . Lorsque vous souhaitez créer une méthode d'expédition personnalisée, vous devez étendre la classe à partir de la classe abstraite WooCommerce WC_Shipping_Method. Il a certains attributs définis, qui sont :
-
$id
: ID (slug, mot clé) de notre expédition qui est obligatoire. -
$number
: Il s'agit d'un ID entier. -
$method_title
: Le nom de notre expédition affiché dans l'admin. -
$method_description
: Une courte description de notre expédition affichée dans l'administrateur (facultatif). -
$enabled
: Chaîne booléenne, "oui" ou "non", qui indique si notre expédition est activée et si elle peut être utilisée ou non. -
$title
: Il est utilisé pour afficher notre nom d'expédition sur notre site. -
$availability
: Ceci définit si la livraison est disponible ou non. -
$countries
: Un tableau de pays pour lesquels cette méthode est activée. La valeur par défaut est un tableau vide. -
$tax_status
: La valeur par défaut est imposable. Si un article est taxable, la taxe sera facturée. -
$fee
: la valeur par défaut est 0 -
$minimum_fee
: les frais minimum pour la méthode et la valeur par défaut sont nuls. -
$has_settings
: Cela définit si cette méthode a des paramètres. La valeur par défaut est true. -
$supports
: Un tableau contenant les fonctionnalités prises en charge par cette méthode. La valeur par défaut est un tableau vide. -
$rates
: Un tableau de tarifs et ceci doit être renseigné pour enregistrer les frais d'expédition. La valeur par défaut est un tableau vide.
Les méthodes définies dans WC_Shipping_Method sont :
-
is_taxable()
: Cela renvoie si nous devons ou non calculer la taxe en plus du tarif d'expédition. -
add_rate( $args = array() )
: cela pousse un tarif d'expédition défini dans le paramètre $args dans l'attribut $rates. -
has_settings()
: Cela renvoie la valeur de l'attribut $has_settings. -
is_available()
: Cela renvoie si la livraison est disponible et s'il y a des pays définis dans l'attribut $countries et que l'attribut $availability est défini sur des valeurs incluant, spécifiques ou excluant, il renverra vrai ou faux si le pays est disponible pour la livraison . -
get_title()
: Cela renvoie le titre de cette expédition. -
get_fee( $fee, $total )
: Cela renvoie la valeur des frais pour cette expédition en fonction des $fee et $total analysés. -
supports( $feature )
: cela renvoie si cette méthode d'expédition prend en charge une fonctionnalité ou non.
Parce que la classe WC_Shipping_Method étend la classe WC_Settings_API, il y a plus d'attributs et de méthodes, que je n'expliquerai pas ici pour des raisons de simplicité.
En outre, d'autres méthodes doivent être définies pour que l'expédition puisse obtenir ou définir des paramètres et calculer le coût réel de l'expédition. Ces méthodes répertoriées ici:
-
init()
: Cela crée les champs et les paramètres du formulaire. Cependant, il peut être nommé différemment, tant que nous utilisons les méthodes qu'il contient et que nous l'appelons dans la méthode __constructor . -
calculate_shipping( $package )
: Cette méthode est utilisée pour calculer le coût de cette expédition et le colis est un tableau avec les produits à expédier.
Je voudrais mettre l'accent sur la méthode calculate_shipping. Pour notre exemple, nous allons utiliser cette méthode et l'ajouter à la méthode add_rate. Cette méthode acceptera un tableau avec plusieurs options comme :
-
id
: Il s'agit de l'identifiant du tarif. -
label
: Il s'agit du libellé du tarif. -
cost
: Le montant des frais de port. -
taxes
: Il accepte un tableau de taxes ou rien donc la taxe est calculée par WooCommerce. Si vous ne voulez pas qu'il accepte la taxe, il peut accepter le faux. -
calc_tax
: Ceci accepte per_order ou per_item. Si vous utilisez per_item, un tableau des coûts devra être fourni.
Nous allons utiliser un filtre WordPress pour obtenir le tableau qui ajoute notre méthode d'expédition dans le tableau de la méthode enregistrée en passant le nom de notre classe, en utilisant un filtre WordPress qui est défini à l'intérieur du plugin WooCommerce. Le filtre s'appelle woocommerce_shipping_methods.
Avec cela sur la table, entrons maintenant dans la section de codage de ce bref tutoriel afin que vous puissiez comprendre tout le concept dans les extraits PHP que je vais partager.
a) Étapes pour créer la nouvelle classe d'expédition
Dans cette section, nous allons créer notre méthode d'expédition en tant que nouveau plugin qui étend WooCommerce.
- Tout d'abord, vous devez ouvrir les plugins wp-content> et créer un nouveau dossier. Pour cela, j'utiliserai le nom njengah -shipping
- Ensuite, vous devez créer un fichier avec le même nom njengah –shipping.php
- Dans ce fichier ajoutez le code suivant :
<?php /** * Nom du plugin : Njengah Shipping * URI du plugin : https://njengah.com/plugins/ * La description: *Version : 1.0.0 * Auteur : Joe Njenga * URI de l'auteur : https://njengah.com s */ si ( ! défini ( 'WPINC' ) ) { mourir; } /* * Vérifiez si WooCommerce est actif */ if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { function njengahplus_shipping_method() { if (! class_exists( 'NjengahPlus_Shipping_Method' ) ) { class NjengahPlus_Shipping_Method étend WC_Shipping_Method { /** * Constructeur pour votre classe d'expédition * * @accès public * @retour vide */ fonction publique __construct() { $this->id = 'njengahplus'; $this->method_title = __( 'NjengahPlus Shipping', 'njengahplus' ); $this->method_description = __( 'Méthode d'expédition personnalisée pour NjengahPlus', 'njengahplus' ); $this->init(); $this->enabled = isset( $this->settings['enabled'] ) ? $this->settings['enabled'] : 'yes'; $this->title = isset( $this->settings['title'] ) ? $this->settings['title'] : __( 'NjengahShipping', 'njengahplus' ); } /** * Initialisez vos paramètres * * @accès public * @retour vide */ fonction init() { // Charger l'API des paramètres $this->init_form_fields(); $this->init_settings(); // Enregistrez les paramètres dans l'administrateur si vous en avez défini add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } /** * Définir le champ des paramètres pour cette expédition * @retour vide */ fonction init_form_fields() { // Nous ajouterons nos paramètres ici } /** * Cette fonction est utilisée pour calculer les frais de port. Dans cette fonction, nous pouvons vérifier les poids, les dimensions et d'autres paramètres. * * @accès public * @param mixte $package @retour vide */ fonction publique calculate_shipping( $package ) { // Nous ajouterons le coût, le tarif et les logiques ici } } } } add_action( 'woocommerce_shipping_init', 'njengahplus_shipping_method' ); function add_njengahplus_shipping_method( $methods ) { $methods[] = 'NjengahPlus_Shipping_Method' ; retourne $methods ; } add_filter( 'woocommerce_shipping_methods', 'add_njengahplus_shipping_method' ); }
Comment ça fonctionne
- Nous vérifions d'abord si la constante WPINC est définie. S'il n'est pas défini, cela signifie que quelqu'un essaie d'accéder à ce fichier directement ou à partir d'un emplacement qui n'est pas WordPress.
- Ensuite, nous devons vérifier si WooCommerce est actif. Ici, nous vérifions si le woocommerce.php est dans le tableau des plugins actifs qui sont enregistrés dans la base de données sous l'option active_plugins.
- woocommerce_shipping_init est l'action principale pour WooCommerce Shipping qui inclut toutes les classes d'expédition avant qu'elles ne soient instanciées. L'utilisation de cette action garantira que notre méthode d'expédition sera incluse après l'initialisation de WooCommerce et au bon endroit pour que WooCommerce puisse l'utiliser.
- La méthode __construct définit certains attributs généraux et certains d'entre eux peuvent être facilement écrasés après le chargement des paramètres depuis la base de données dans la méthode init.
- Les autres méthodes sont laissées vides car nous les définirons plus tard dans le tutoriel.
Ensuite, vous devez vous diriger pour activer le plugin en suivant les étapes ci-dessous :
- Connectez-vous à votre site WordPress et accédez au tableau de bord en tant qu'utilisateur administrateur.
- Dans le menu Tableau de bord, cliquez sur Plugins et activez l'expédition Njengah comme indiqué ci-dessous :
- Après avoir activé le plugin, rendez-vous sur WooCommerce > Paramètres . Cliquez sur l'onglet WooCommerce puis cliquez sur Expédition NjengahPlus . Vous devriez pouvoir voir ceci :
b) Définition de la disponibilité du pays
La méthode d'expédition que nous avons créée n'est disponible que dans la liste de pays précédemment déterminée.
- Ajoutez ceci dans la méthode __construct :
<?php //... $this->method_description = __( 'Méthode d'expédition personnalisée pour NjengahPlus', 'njengahplus' ); // Disponibilité & Pays $this->availability = 'incluant' ; $this->pays = tableau( 'US', // États-Unis d'Amérique 'CA', // Canada 'DE', // Allemagne 'GB', // Royaume-Uni 'IL', // Italie 'ES', // Espagne 'RH' // Kenya ); $this->init(); //...
Comment fonctionne le code
L'attribut de disponibilité est défini sur "y compris" afin que cette expédition ne soit disponible que pour les pays dans l'attribut pays.
WooCommerce vérifiera si le pays d'expédition est inclus dans les pays d'attribut.
Création des paramètres
Vous devez simplement copier ce code et remplir notre méthode init_form_fields :
<?php fonction init_form_fields() { $this->form_fields = array( 'activé' => tableau( 'title' => __( 'Activer', 'njengahplus' ), 'type' => 'case à cocher', 'description' => __( 'Activer cette expédition.', 'njengahplus' ), 'par défaut' => 'oui' ), 'titre' => tableau( 'titre' => __( 'Titre', 'njengahplus' ), 'type' => 'texte', 'description' => __( 'Titre à afficher sur le site', 'njengahplus' ), 'default' => __( 'NjengahPlus Shipping', 'njengahplus' ) ), ); }
Pour vérifier le résultat, procédez comme suit :
- Connectez-vous à votre site WordPress et accédez au tableau de bord en tant qu'administrateur. Dans le menu Tableau de bord, cliquez sur WooCommerce > Paramètres.
- Cliquez sur l'onglet Expédition et cliquez sur Expédition NjengahPlus comme indiqué ci-dessous :
- Cochez la case et enregistrez les modifications.
Nous pouvons définir la méthode d'expédition pour expédier jusqu'à 100 kg. Ensuite, nous autoriserons cela à être modifié dans les paramètres si cette règle change bientôt. Après avoir défini ceci, le code des paramètres ressemblera à ceci :
<?php fonction init_form_fields() { $this->form_fields = array( 'activé' => tableau( 'title' => __( 'Activer', 'njengahplus' ), 'type' => 'case à cocher', 'description' => __( 'Activer cette expédition.', 'njengahplus' ), 'par défaut' => 'oui' ), 'titre' => tableau( 'titre' => __( 'Titre', 'njengahplus' ), 'type' => 'texte', 'description' => __( 'Titre à afficher sur le site', 'njengahplus' ), 'default' => __( 'NjengahPlus Shipping', 'njengahplus' ) ), 'poids' => tableau( 'title' => __( 'Poids (kg)', 'njengahplus' ), 'type' => 'nombre', 'description' => __( 'Poids maximum autorisé', 'njengahplus' ), 'par défaut' => 100 ), ); }
Dans le code ci-dessus, nous avons maintenant défini le poids maximum dans les paramètres. Voici le résultat :
c) Calcul des frais d'expédition
Pour calculer les frais de port, nous mettrons à jour la méthode calculate_shipping une étape à la fois afin que vous puissiez comprendre chaque étape.
- Tout d'abord, nous devons obtenir le coût en poids . Pour cela, il suffit d'ajouter ce code à la méthode calculate_shipping :
<?php //... fonction publique calculate_shipping( $package ) { $poids = 0 ; $coût = 0 ; $pays = $package["destination"]["pays"] ; foreach ( $package['contenu'] as $item_id => $values ) { $_product = $values['data'] ; $weight = $weight + $_product->get_weight() * $values['quantity'] ; } $poids = wc_get_weight( $poids, 'kg' ); si( $poids <= 10 ) { $coût = 0 ; } elseif( $poids <= 30 ) { $coût = 5 ; } elseif( $poids <= 50 ) { $coût = 10 ; } autre { $coût = 20 ; } }
- À partir du code ci-dessus, nous avons le coût basé sur le poids du panier, nous devons calculer le coût pour le pays d'expédition sélectionné. Pour cela ajoutez ce code :
<?php fonction publique calculate_shipping( $package ) { $countryZones = tableau( 'HR' => 0, 'US' => 3, 'Go' => 2, 'CA' => 3, 'ES' => 2, 'DE' => 1, 'IL' => 1 ); $zonePrices = tableau( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zoneFromCountry = $countryZones[ $country ]; $priceFromZone = $zonePrices[ $zoneFromCountry ] ; $cost += $priceFromZone ; }
- Nous avons calculé le coût en fonction du poids total et nous avons également ajouté le coût en fonction du pays d'expédition. La dernière étape consiste à ajouter ce code pour enregistrer le tarif.
Comment fonctionne le code
Dans le premier extrait de cette section, nous avons défini quelques variables de départ : $weight
, $cost
et $country
. Pour obtenir le total, nous obtenons le poids total en itérant le panier et en ajoutant le poids de chaque produit du panier à la variable $weight
.
Après avoir obtenu le poids total, nous utilisons la function wc_get_weight
pour convertir le poids en kilogrammes puisqu'il s'agit de l'unité que notre méthode d'expédition a fixée comme limite. Ensuite, la dernière chose a été de fixer la limite à 100 kg.
Dans le deuxième extrait, le tableau $countryZones
contient les zones pour chaque pays et le deuxième tableau $zonePrices
contient les prix pour chaque zone.
Ce sera le résultat pour l'Italie Zone 1 :
Ce sera le résultat pour l'Espagne Zone 2 :
Ce sera le résultat pour la zone Canada :
Si vous avez eu du mal à implémenter ce code, voici le code complet :
<?php fonction publique calculate_shipping( $package ) { $poids = 0 ; $coût = 0 ; $pays = $package["destination"]["pays"] ; foreach ( $package['contenu'] as $item_id => $values ) { $_product = $values['data'] ; $weight = $weight + $_product->get_weight() * $values['quantity'] ; } $poids = wc_get_weight( $poids, 'kg' ); si( $poids <= 10 ) { $coût = 0 ; } elseif( $poids <= 30 ) { $coût = 5 ; } elseif( $poids <= 50 ) { $coût = 10 ; } autre { $coût = 20 ; } $countryZones = tableau( 'HR' => 0, 'US' => 3, 'Go' => 2, 'CA' => 3, 'ES' => 2, 'DE' => 1, 'IL' => 1 ); $zonePrices = tableau( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zoneFromCountry = $countryZones[ $country ]; $priceFromZone = $zonePrices[ $zoneFromCountry ] ; $cost += $priceFromZone ; $taux = tableau( 'id' => $this->id, 'étiquette' => $this->titre, 'coût' => $coût ); $this->add_rate( $rate ); }
Conclusion
Dans cet article, nous avons créé un plugin personnalisé pour ajouter une méthode d'expédition personnalisée dans WooCommerce. De plus, j'ai partagé avec vous l'API d'expédition WooCommerce qui vous permet de créer votre méthode d'expédition en quelques étapes simples. En outre, les limitations et la disponibilité peuvent être définies dans la méthode d'expédition lors du calcul de la disponibilité ou du coût de la méthode d'expédition. Cependant, ils peuvent être définis en dehors de la méthode d'expédition à l'aide des actions WooCommerce. J'espère que ce tutoriel a fourni une solution pour ajouter une méthode d'expédition personnalisée dans WooCommerce.
Articles similaires
- Comment ajouter des numéros GTIN sur les produits dans WooCommerce
- Comment supprimer a été ajouté à votre panier Message WooCommerce
- Comment ajouter un logo de confiance ou sécurisé sur la page de paiement WooCommerce
- Déconnexion de WooCommerce sans confirmation : Comment supprimer "Êtes-vous sûr de vouloir vous déconnecter ?"
- Comment rediriger une page WordPress sans plugins ?
- Comment ajouter une image de produit à la page de paiement WooCommerce
- Comment définir des produits en vedette dans WooCommerce
- Comment masquer le champ du code de coupon WooCommerce
- Comment afficher les produits WooCommerce par catégorie
- Comment masquer tous les produits de la page de la boutique dans WooCommerce
- Comment trier les catégories WooCommerce pour une meilleure expérience utilisateur
- Comment vendre des produits numériques avec WooCommerce
- Comment modifier l'avis "Ajouté au panier" de WooCommerce
- Comment désactiver la méthode de paiement pour une catégorie spécifique
- 30+ meilleurs plugins WooCommerce pour votre boutique (la plupart sont GRATUITS)
- Comment renommer les messages d'état de la commande dans WooCommerce
- 23 meilleurs plugins WooCommerce pour la personnalisation de la page de paiement
- Comment supprimer le tri des produits par défaut WooCommerce
- Comment vérifier si le plugin est actif dans WordPress [3 FAÇONS]