MageSentinel

Τα σύνολα στο checkout του WooCommerce δεν ενημερώνονται: το αίτημα update_checkout

Στο κλασικό checkout του WooCommerce, κάθε αλλαγή στη διεύθυνση, στον τρόπο αποστολής ή στο κουπόνι στέλνει ένα αίτημα που ξαναϋπολογίζει την παραγγελία και ξανασχεδιάζει τον πίνακα σύνοψης. Όταν αυτό το αίτημα αποτυγχάνει, η σελίδα φαίνεται κανονική αλλά τα σύνολα, οι τρόποι αποστολής και οι πληρωμές δεν αλλάζουν, και συχνά η παραγγελία δεν ολοκληρώνεται.

Όλα τα άρθρα2 λεπτά ανάγνωσης

Αριθμομηχανή και στυλό πάνω σε χειρόγραφες σημειώσεις

Τι κάνει το update_checkout

Το script του checkout παρακολουθεί αλλαγές στα πεδία διεύθυνσης και στους τρόπους αποστολής, και πυροδοτεί το jQuery event `update_checkout`. Αυτό στέλνει POST στο `?wc-ajax=update_order_review`, που ξαναϋπολογίζει αποστολή, φόρους και σύνολα στον server και επιστρέφει νέο HTML για τον πίνακα σύνοψης και τους τρόπους πληρωμής.

Τα plugins μπορούν να πυροδοτήσουν το ίδιο event με `jQuery(document.body).trigger('update_checkout')`, και έτσι πολλά plugins ημερομηνίας παράδοσης, παραλαβής και χρεώσεων ανανεώνουν τα σύνολα. Το checkout με blocks δεν χρησιμοποιεί αυτό το event· μιλά με το Store API.

Συμπτώματα

Οι τρόποι αποστολής γράφουν «Συμπληρώστε τη διεύθυνσή σας για να δείτε επιλογές αποστολής» ενώ η διεύθυνση είναι συμπληρωμένη. Τα σύνολα δεν αλλάζουν όταν αλλάζει η χώρα ή ο τρόπος αποστολής. Ένα spinner πάνω στη σύνοψη δεν φεύγει ποτέ. Λείπουν τρόποι πληρωμής ή δεν ταιριάζουν με τη χώρα. Η ολοκλήρωση αποτυγχάνει με μήνυμα ότι άλλαξαν τα σύνολα.

Βρείτε το αίτημα που αποτυγχάνει

Ανοίξτε τα εργαλεία προγραμματιστή του browser, καρτέλα Network, και αλλάξτε χώρα ή τρόπο αποστολής. Ψάξτε το αίτημα `update_order_review`. Αν δεν υπάρχει καθόλου, φταίει σφάλμα JavaScript νωρίτερα στη σελίδα: δείτε την Console. Αν επιστρέφει σφάλμα, σελίδα login ή HTML αντί για JSON, φταίει ο server, ένας κανόνας ασφαλείας ή η cache.

Ένα PHP fatal error σε plugin αποστολής ή χρεώσεων συνήθως φαίνεται εδώ ως κενή ή χαλασμένη απάντηση, και ως εγγραφή στο WooCommerce → Κατάσταση → Αρχεία καταγραφής, στο fatal-errors.

Οι συνήθεις αιτίες

Ένα σφάλμα JavaScript από άλλο plugin ή το θέμα σταματά το script του checkout πριν δέσει τους handlers του. Η βελτιστοποίηση scripts που καθυστερεί ή συνενώνει το jQuery και το script του checkout χαλάει τη σειρά φόρτωσης. Κανόνας cache ή CDN αποθηκεύει τα αιτήματα `?wc-ajax=` ή την ίδια τη σελίδα checkout. Firewall ή κανόνας κατά των bots μπλοκάρει το POST. Το θέμα έχει παλιό αντίγραφο του template `review-order.php`, οπότε τα κομμάτια δεν ταιριάζουν πια.

Όλα αυτά εμφανίζονται μετά από μια αλλαγή: ενημέρωση plugin, νέα ρύθμιση βελτιστοποίησης, κανόνας CDN. Η ρουτίνα από το ασφαλής ενημέρωση plugins στο WooCommerce πιάνει τα περισσότερα πριν φτάσουν στους πελάτες.

Διόρθωση και επιβεβαίωση

Εξαιρέστε το καλάθι, το checkout και τα αιτήματα `wc-ajax` από την cache σελίδων και από τη βελτιστοποίηση scripts. Βάλτε προεπιλεγμένο θέμα και απενεργοποιήστε plugins ένα ένα στο staging ώσπου να πετύχει το αίτημα. Ενημερώστε τα παλιά template overrides, που το WooCommerce δείχνει στο WooCommerce → Κατάσταση → Κατάσταση συστήματος.

Μετά περάστε το checkout με πραγματική διεύθυνση και αλλάξτε τρόπο αποστολής, όπως ένας πελάτης. Ο δωρεάν έλεγχος checkout WooCommerce κάνει αυτή τη διαδρομή σε πραγματικό browser και δείχνει το βήμα όπου σταματά. Για τη γενική εικόνα δείτε το checkout του WooCommerce δεν δουλεύει.

Συχνές ερωτήσεις

Τι πυροδοτεί το update_checkout στο WooCommerce;

Οι αλλαγές σε πεδία διεύθυνσης, τρόπο αποστολής ή κουπόνια στο κλασικό checkout, και κάθε plugin που καλεί jQuery(document.body).trigger('update_checkout').

Γιατί το checkout του WooCommerce δεν ενημερώνει την αποστολή;

Συνήθως αποτυγχάνει το αίτημα update_order_review: σφάλμα JavaScript, βελτιστοποίηση scripts, cache στα αιτήματα wc-ajax, κανόνας firewall ή σφάλμα PHP σε plugin αποστολής.

Χρησιμοποιεί το checkout με blocks το update_checkout;

Όχι. Το Checkout block ενημερώνει τα σύνολα μέσω του Store API, οπότε οι handlers update_checkout των plugins δεν κάνουν τίποτα εκεί.