info de pickup point supprimer de la session avant le paiement de la commande
-
Bonjour
Lors du debut du paiement de la commande, les informations de point relais sont supprimées de la session suite à la création de la commande (line 197 de abstract_pickup_widget.php). Ceci pose problème pour certains modes de paiement externe qui s’ouvrent en popup sans rechargement de la page de validation (par exemple klarna).
si l’utilisateur annule le paiement, il revient à la page de validation de commande sans rechargement de la page, le point relais est affiché comme sélectionné, mais lors d’une nouvelle validation de la commande, l’erreur “please select a pickup point” est levée par la fonction prevent_checkout_process de la classe abstract_pickup_widget.
vu que la fonction save_pickup_info est appelé par plusieurs hook dont woocommerce_order_status_processing, la valeur de session ne pourrait être supprimé que dans le cas où la commande a bien été payé et a donc le statut “processing”.
Je n’ai pas étudié l’ensemble du code du plugin, et il y a peut être d’autres cas à prendre en compte, mais cette modification dans la fonction save_pickup_info a résolu le bug que je rencontrais sur ma page de validation de commande.
Si vous confirmer le bug, merci d’inclure la correction dans une future version.
Bonne journée
--- a/wp-content/plugins/wc-multishipping/inc/front/pickup/abstract_classes/abstract_pickup_widget.php
+++ b/wp-content/plugins/wc-multishipping/inc/front/pickup/abstract_classes/abstract_pickup_widget.php
@@ -76,6 +76,9 @@ abstract class abstract_pickup_widget {
$pickup_country = wms_get_var( 'cmd', 'pickup_country', 'FR' );
$pickup_provider = wms_get_var( 'cmd', 'pickup_provider', '' );
+ if( $pickup_provider != static::SHIPPING_PROVIDER_ID ) {
+ return;
+ }
if ( strlen( 4 == $pickup_zip_code ) )
$pickup_country = "0" . strval( $pickup_zip_code );
@@ -97,7 +100,7 @@ abstract class abstract_pickup_widget {
] );
}
- WC()->session->set( self::PICKUP_LOCATION_SESSION_VAR_NAME, $pickup_info );
+ WC()->session->set( static::PICKUP_LOCATION_SESSION_VAR_NAME, $pickup_info );
wp_send_json( [
'error' => false,
@@ -132,7 +135,7 @@ abstract class abstract_pickup_widget {
$countries_obj = new \WC_Countries();
$countries = $countries_obj->__get( 'countries' );
- $pickup_info = WC()->session->get( self::PICKUP_LOCATION_SESSION_VAR_NAME );
+ $pickup_info = WC()->session->get( static::PICKUP_LOCATION_SESSION_VAR_NAME );
$map_to_use = get_option( 'wms_' . static::SHIPPING_PROVIDER_ID . '_section_pickup_points_map_type', 'openstreetmap' );
@@ -180,7 +183,7 @@ abstract class abstract_pickup_widget {
if ( ! $session )
return;
- $pickup_info = $session->get( self::PICKUP_LOCATION_SESSION_VAR_NAME );
+ $pickup_info = $session->get( static::PICKUP_LOCATION_SESSION_VAR_NAME );
if ( empty( $pickup_info ) )
return;
@@ -194,7 +197,9 @@ abstract class abstract_pickup_widget {
$order->update_meta_data( $order_class::PICKUP_INFO_META_KEY, $pickup_info );
$order->save();
- WC()->session->set( self::PICKUP_LOCATION_SESSION_VAR_NAME, null );
+ if($order->status == 'processing') {
+ WC()->session->set( static::PICKUP_LOCATION_SESSION_VAR_NAME, null );
+ }
}
public function prevent_place_order_button( $order_button ) {
@@ -212,7 +217,7 @@ abstract class abstract_pickup_widget {
return $order_button;
}
- $pickup_info = WC()->session->get( self::PICKUP_LOCATION_SESSION_VAR_NAME );
+ $pickup_info = WC()->session->get( static::PICKUP_LOCATION_SESSION_VAR_NAME );
if ( ! empty( $pickup_info ) )
return $order_button;
@@ -240,7 +245,7 @@ abstract class abstract_pickup_widget {
return;
- $pickup_info = WC()->session->get( self::PICKUP_LOCATION_SESSION_VAR_NAME );
+ $pickup_info = WC()->session->get( static::PICKUP_LOCATION_SESSION_VAR_NAME );
if ( empty( $pickup_info ) || strpos( $selected_shipping_method_name, $pickup_info['pickup_provider'] ) === false ) {
if ( $errors )
@@ -257,7 +262,7 @@ abstract class abstract_pickup_widget {
return;
- $pickup_data = WC()->session->get( self::PICKUP_LOCATION_SESSION_VAR_NAME );
+ $pickup_data = WC()->session->get( static::PICKUP_LOCATION_SESSION_VAR_NAME );
The topic ‘info de pickup point supprimer de la session avant le paiement de la commande’ is closed to new replies.