J'utilise un plugin personnalisé pour la méthode d'expédition Woocommerce. Le plugin exécute une nouvelle classe qui étend WC_Shipping_MEthod, mais le problème est que le prix 'cost' est calculé dans une autre fonction en dehors de la classe.Fonction de classe pour la méthode d'expédition personnalisée sur la page de paiement de Woocommerce
Ainsi, dans la classe actuelle je:
public function calculate_shipping($package=array()) {
/* $this->add_rate(array(
'id' => $this->id . $this->instance_id,
'label' => $this->title,
'cost' => 0,
)); */
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => 0,
'taxes' =>false,
//'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate($rate);
}
En dehors de la classe, dans un autre fichier, j'ai une fonction qui calcule le coût pour l'expédition:
//add shipping cost to checkout total
add_action('woocommerce_cart_calculate_fees', 'woo_add_cart_fee');
function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->shipping;
$wc_econt = new WC_Econt_Shipping_Method;
if (is_checkout() && (bool)$wc_econt->inc_shipping_cost == TRUE) {
if(!isset($_SESSION)){
session_start();
}
//write_log('session econt customer shipping cost:'.$_SESSION['econt_shipping_cost']);
$extracost = (isset($_SESSION['econt_shipping_cost']) ? $_SESSION['econt_shipping_cost'] : 0);
if ($extracost != '0') {
WC()->cart->add_fee(__('Econt Express Shipping Method','woocommerce-econt'), $extracost);
}
}
}
Si seulement changer 0 à $ extracode dans la fonction de classe il ne met pas à jour le coût d'expédition sur la page de paiement:
fonction publique calculate_shipping ($ package = array()) {
Je suppose que la classe est exécutée avant la fonction woo_add_cart_fee, et c'est pourquoi elle ne peut pas obtenir la valeur de la variable $ extracost.
Comment résoudre ceci?