Personnaliser la méthode de zone d'expédition Woocommerce
P粉558478150
P粉558478150 2023-08-29 10:57:38
0
1
375

J'ai passé plusieurs heures à essayer de trouver la bonne façon de mettre en œuvre une solution permettant de créer une méthode de zone d'expédition personnalisée.

WC:7.2.2 Stress au travail : 6.0.3

Le site est en bonne santé, aucune erreur d'autorisation, etc. (uniquement les mises à jour des informations disponibles)

J'ai utilisé un certain nombre de sources telles que : https://woocommerce.github.io/woocommerce-rest-api-docs/?php#shipping-zone-methods

https://github.com/woocommerce/woocommerce/wiki/Shipping-Method-API#properties

https://gist.github.com/mikejolley/3b37b9cc19a774665f31

https://code.tutsplus.com/tutorials/create-a-custom-shipping-method-for-woocommerce--cms-26098

Il en existe bien d’autres.

Fondamentalement, j'ai besoin d'un exemple de code pour créer (un plug-in) pour une méthode de zone d'expédition avec une fonction de frais d'expédition personnalisée. Nous sommes basés sur Woocommerce Easy Booking et avons des jours dans les métadonnées, c'est pourquoi nous ne pouvons pas utiliser l'un des plugins premium officiels de woocommerce pour gérer cela.

我最终得到了以下代码:

id = 'diet_day_shipping'; // Identifiant de votre mode d'expédition. Devrait être unique. $this->method_title = __('Expédition par jour de régime'); // Titre affiché dans l'administrateur $this->method_description = __('Frais d'expédition par réservation'); // Description affichée dans l'administrateur $this->enabled = "oui" ; // Ceci peut être ajouté en tant que paramètre mais pour cet exemple, son activation est forcée //$this->title = "Réservation facile, expédition par jour" ; // Ceci peut être ajouté en tant que paramètre mais pour cet exemple, c'est forcé. //$this->rates = array('calculate_shipping'); $this->supporte = array( « zones d'expédition », 'paramètres d'instance', 'paramètres d'instance-modal', ); $this->instance_form_fields = tableau( 'titre' => tableau( 'titre' => __('Titre de la méthode'), 'type' => 'texte', 'description' => __('Cela contrôle le titre que l'utilisateur voit lors du paiement.'), 'par défaut' => __('Livraison quotidienne pour votre alimentation'), ), 'coût' => tableau( 'titre' => __('Coût'), 'type' => 'nombre', 'description' => __('Cela contrôle le coût par jour.'), 'par défaut' => 7, ) ); $this->init(); $this->titre = $this->get_option('titre'); $this->cost = $this->get_option('cost'); add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options')); }/*** Initialisez vos paramètres * * @accès public * @retour nul*/ fonction initialisation() { // Charge l'API des paramètres $this->init_form_fields(); // 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')); } fonction init_form_fields() { $this->form_fields = tableau( 'titre' => tableau( 'titre' => __('Titre de la méthode'), 'type' => 'texte', 'description' => __('Cela contrôle le titre que l'utilisateur voit lors du paiement.'), 'par défaut' => __('Frais d'expédition du régime quotidien'), ), 'coût' => tableau( 'titre' => __('Coût'), 'type' => 'nombre', 'description' => __('Cela contrôle le coût par jour.'), 'par défaut' => 7, ) ); } /*** fonction calculate_shipping. * @param array $package (par défaut : array())*/ fonction publique calculate_shipping ($ package = array ()) { //code en dur pour les tests $numéro_d'expédition = 7 ; //probablement un moyen de calculer les frais d'expédition finaux /* foreach ($package['contents'] as $item_id => $values) { $_product = $values['données']; $shipping_number = $shipping_number + $_product->wceb_get_product_booking_duration() * $values['quantity']; }*/ $this->add_rate(array( 'identifiant' => $this->id . $this->instance_id, 'étiquette' => 'Dostawa poza Wa-wa', 'coût' => $numéro_d'expédition, )); } } } } add_action('woocommerce_shipping_init', 'your_shipping_method_init'); fonction add_your_shipping_method($methods) { $methods['diet_day_shipping'] = 'WC_Your_Shipping_Method'; retourner $méthodes ; } add_filter('woocommerce_shipping_methods', 'add_your_shipping_method');

多人游戏天数的价值。

Quelqu’un peut-il m’aider à corriger mon code ?

Il n'y a actuellement aucune option de paramètres affichée dans le panneau d'administration. Pas dans la ligne de méthode de la zone d'expédition, ni dans le panneau des paramètres de livraison.

De plus, lorsque j'envoie un code postal depuis une zone en utilisant une méthode d'expédition personnalisée, le panier indique qu'aucune méthode d'expédition n'est disponible pour ce code postal)

P粉558478150
P粉558478150

répondre à tous (1)
P粉833546953

J'ai également passé trois heures hier et une heure supplémentaire aujourd'hui à essayer de résoudre un problème très similaire. Je crois avoir maintenant une solution, ou du moins vous aider à vous mettre dans la bonne direction. La documentation officielle de WooCommerce semble faire la différence entreParamètresetParamètres d'instance(ou je ne trouve pas de documentation sur les paramètres d'instance - plus dans le paragraphe suivant).

Ce qui suit est basé sur ce que j'ai découvert jusqu'à présent par essais et erreurs. Si quelqu'un possède une documentation "officielle" à ce sujet, j'attendrais avec impatience ses commentaires sur cette réponse.

Il est important de faire la distinction entre « paramètres » et « paramètres d'instance ». Voir cette image pour une comparaison visuelle sur le backend WooCommerce :

Paramètres

Les paramètres font référence aux « Paramètres globaux du mode d'expédition », c'est-à-dire qu'ils apparaissent dans le sous-menu global, mais pas dans la zone d'expédition. La documentation officielle de WooCommerce montre comment utiliser les paramètres et comment ajouter une nouvelle page de paramètres :

https://woocommerce.com/document/shipping-method-api/一个>

https://woocommerce.com/document/settings-api/p>

Pour utiliser la fonction/API des paramètres, vous devez spécifier

$this->supports = array('settings'); // You may also need to include shipping-zones

Dans votre constructeur.

Les « Paramètres » sont appliqués/utilisés/stockés globalement, c'est-à-dire indépendamment des régions de livraison individuelles.

Paramètres de l'instance

Les paramètres d'instance sont des paramètres qui peuvent être enregistrés individuellement pour chaque zone d'expédition. Pour les utiliser, vous devez utiliser

$this->supports = array('shipping-zones', 'instance-settings', 'instance-settings-modal');

Dans votre constructeur.

L'exemple suivant me permet de comprendre les différences subtiles mais importantes de l'API de configuration d'instance :

https://gist.github.com/malkafly/57a5e07fd03d6fd5cab84c6182d84c86

Différences de code et concernant votre question d'origine

Veuillez noter qu'il existe des différences subtiles dans les fonctionnalités et propriétés exactes de ces deux API. En fonction de votre situation, vous devez décider d'utiliser l'une de ces API, puis utiliser strictement cette API. Vous confondez les deux API, ce qui explique probablement pourquoi vous ne parvenez pas à faire fonctionner votre méthode d'expédition personnalisée.

Si vous souhaitez utiliser l'API des paramètres (globaux) :

  • $this->supports = array('shipping-zones', 'settings');
  • Utilisez $this->form_fields (au lieu de $this->instance_form_fields)
  • Utilisez $this->settings['title'] pour récupérer les paramètres enregistrés

Si vous souhaitez utiliser l'API des paramètres d'instance (spécifique à la région de livraison) :

  • Assurez-vous que votre constructeur ressemble à ceci/contient le code suivant :

    public function __construct( $instance_id = 0 ) { $this->instance_id = absint( $instance_id ); //... }
  • Utilisez $this->instance_settings['title'] pour récupérer les paramètres enregistrés

Les liens dans les catégories de paramètres/paramètres d'instance correspondantes que j'ai publiées ci-dessus contiennent de nombreux exemples de code (fonctionnels) supplémentaires pour chaque méthode.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!