Thème mise à jour des méthodes d'expédition au moment du paiement via ajax
Ce que je suis en train de réaliser: Dans le thème, j'ai besoin de vérifier une date livré par un datepicker champ lorsque l'utilisateur sélectionne une date, et ensuite mettre à jour les options d'expédition en conséquence via ajax, de sorte que les choses comme la livraison gratuite peut être pris quand ils ne sont pas appropriées.
Ce que j'ai actuellement connaissez/avez deviné: j'ai actuellement le jQuery événement de tir et de l'envoi par le biais d'un jour à un script personnalisé, ce qui est un peu là où j'ai besoin de le faire. Je n'ai pas été en mesure de trouver une fonction au sein de thème classes qui retourne uniquement les données d'expédition, donc je ne pense pas que je peux appeler cela et le retourner comme un fragment, comme ils le font pour le checkout déjà.
Cependant, je n'ai trouver que
WC_AJAX::update_order_review()
a une action en son sein, et j'ai réussi à accroché une fonction sur cette action, ET je ai été en mesure de déclencher
t( 'body' ).trigger( 'update_checkout' );
qui déclenche l'action que les mises à jour de la caisse d'examen bloc.
Ma vraie question: Tout ce qui est excellent, et j'en garde de la recherche comme sa dans la bonne direction, mais je ne sais pas thème assez bien pour savoir comment obtenir les méthodes d'expédition à l'intérieur de mon accro à l'action pour annuler les modifications nécessaires. Personne ne sait si je peux les obtenir par le biais de l' $thème global de l'objet, et puis demandez-leur de lire le reste de cet WC_AJAX méthode??
Toute aide serait grandement appréciée.
** note: oui, je sais que c'est un 't' et pas un '$' dans le jQuery. Pas une erreur
OriginalL'auteur Trevor Miles Wagner | 2015-04-21
Vous devez vous connecter pour publier un commentaire.
Donc, pour ceux d'entre vous qui peuvent en avoir besoin, il faut un peu finagling dans le thème, parce que de la façon de gérer la sortie de panier/caisse des valeurs pour l'expédition et les options de paiement, mais à la fin, je pouvais y arriver à l'aide de thème de crochets, et très peu de plugin modification, donc, un assez propre solution.
Fondamentalement, ce que j'ai fait était d'utiliser thème des séances, de deux crochets, et un javascript déclencheur qui rafraîchit la caisse de l'ordre d'examen.
Grâce à une combinaison de la
woocommerce_checkout_update_order_review
crochet qui se passe dans leWC_AJAX::update_order_review
et l'utilisation de la aformentioned$( 'body' ).trigger( 'update_checkout' );
appel, je pourrais accrocher dans l'action que les mises à jour de la caisse d'examen bloc. So far So good.Ce que j'ai fait dans cette fonction était de vérifier si le champ a une valeur, et s'il le fait, l'enregistrer dans le
WC()->session
. ENSUITE, à partir deWC_AJAX::update_order_review
appelswoocommerce_order_review()
à saisir toutes les mises à jour panier et méthodes d'expédition, j'ai regardé dans le modèle associé à cette fonction et trouvé un autre crochet,woocommerce_review_order_before_shipping
, ce qui me permet de modifier les méthodes d'expédition avant la cart modèle de boucles à travers et construit les options d'expédition dans lewc_cart_totals_shipping_html()
.Maintenant, je sais, vous allez me faire attendre, j'ai besoin de la caisse méthodes d'expédition, pas de panier, mais dans la réalité, ils semblent être une seule et même chose.
J'espère que mon gaspillé des heures à aider quelqu'un d'autre avec un problème similaire.
Acclamations.
OriginalL'auteur Trevor Miles Wagner
Afin de Trevor réponse n'a pas vraiment fonctionné pour moi (peut-être WC a changé depuis qu'elle a été faite), il ne me diriger dans la bonne direction.
J'ai utilisé certains légèrement différents filtres. Le problème que j'ai besoin pour résoudre était ajout/suppression de certaines options d'expédition, basé sur un champ personnalisé.
L'extrait ci-dessus est une version incomplète de mon code, mais doit obtenir le point à travers. Il peut être testé facilement en tapant
jQuery( 'body' ).trigger( 'update_checkout' );
dans votre console javascript.Merci pour les conseils Trevor.
OriginalL'auteur DarkNeuron
Si quelqu'un veut mettre à jour le panier:
Modifier la quantité, puis revenir.
Et les frais de livraison est calculé à nouveau.
(plus de 5 heures de code de la navigation, la prochaine fois je vais le code de l'ensemble de la boutique en ligne, il suffit d'utiliser un bon cadre et entièrement personnalisable OMG)
OriginalL'auteur Dávid Bíró