2017-10-18 5 views
0

Je rencontre un petit problème avec le panier de woocommerce.Woocommerce, panier, et la session

Description du problème:

dire que je suis connecté, j'ai 3 produits dans le panier. Si je me déconnecte, j'ai 0 produits dans le panier. J'ajoute un produit et je me reconnecte. J'ai toujours ce produit que j'ai ajouté en étant déconnecté. C'est bien, comme je suppose que lorsque vous naviguez et que vous vous connectez juste à la caisse, vous ne voulez pas que les anciens éléments du panier apparaissent soudainement. Maintenant, si je me déconnecte, j'ai 0 produits, ce qui est également bien, car soudainement, vous ne devenez plus personne et vous pouvez supposer qu'un nouvel utilisateur va prendre. Mais, si, avec un panier vide, je me reconnecte, j'ai maintenant les 3 produits depuis le début, au lieu d'avoir le 1 que j'avais lors de ma précédente visite.

Ce que j'aimerais réaliser Par défaut, dans l'histoire ci-dessus, woocommerce afficherait un panier avec 1 article comme prévu. Mais dans le thème que je construis, je charge le panier entier via ajax. J'ai une petite fonction qui fait essentiellement ceci:

function sp_get_cart() { 
    $cart = WC()->cart->get_cart(); 
    wp_send_json($cart); 
} 
add_action('wp_ajax_get_cart', 'sp_get_cart'); 
add_action('wp_ajax_nopriv_get_cart', 'sp_get_cart'); 

J'ai aussi toute la partie signon/signout de travailler avec ajax. J'ai essayé de trouver dans le code woocommerce des choses que j'ai peut-être manqué, mais je n'ai rien trouvé. Dois-je faire quelque chose de spécifique lors du traitement du code d'accès ou de la connexion? Je pensais pouvoir compter sur le comportement par défaut de la session de woocommerce, mais quelque chose semble cassé, et quand je me connecte avec des éléments dans le panier, il semble que ces nouveaux éléments ne sont pas ajoutés à la session stockée dans la base de données. le code suivant arrive, la version précédente est en cours de chargement. Toute aide serait très appréciée.

edit: voici la fonction logout

function sp_logout() { 
    WC()->session->destroy_session(); 
    wp_logout(); 
    ob_clean(); 
    // $_SESSION = array(); 

    http_response_code(200); 
    wp_send_json(array('status' => 'OK')); 
    die(); 
} 
add_action('wp_ajax_logout', 'sp_logout'); 
add_action('wp_ajax_nopriv_logout', 'sp_logout'); 

Répondre

0

Effacez variable globale $ _SESSION, sur votre journal en fonction $_SESSION = array();

+0

Je vais essayer demain matin, mais est WooCommerce ne pas utiliser la base de données pour la session depuis 2.5? J'ai déjà effacé les cookies sur la déconnexion. Je peux coller la fonction ajax de déconnexion demain si ça aide. –

+0

pas de chance, je vais modifier mon message pour ajouter la fonction de déconnexion ajax. –