Πως να προσθέσω έξοδα αντικαταβολής στο woocommerce;
Συχνά μας παρουσιάζεται η ανάγκη να προσθέσουμε κάποιο έξτρα κόστος σε κάποιους τρόπους πληρωμής (συνήθως στην αντικαταβολή αλλά μπορεί να τύχει σε οποιαδήποτε μέθοδο πληρωμής). Εαν δε θέλουμε κάτι πολύπλοκο καλό θα ήταν να γίνει χωρίς τη χρήση plugin. Ο τρόπος είναι ο παρακάτω
add_action( 'woocommerce_cart_calculate_fees', function() {
$cod_fee = 3;
$chosen_gateway = WC()->session->get( 'chosen_payment_method' );
if ( $chosen_gateway == 'cod' )
{
$chosen_shipping_methods = wc_get_chosen_shipping_method_ids();
if ( !in_array('local_pickup', $chosen_shipping_methods) )
{
WC()->cart->add_fee( __('Cash on Delivery', 'woocommerce'), $cod_fee );
}
}
} );
Ας δούμε όμως τι γράφουμε και γιατί το γράφουμε
Σειρά 1: Αρχικά το hook που πρέπει να χρησιμοποιήσουμε είναι το woocommerce_cart_calculate_fees
Σειρά 2: Εδώ απλά ορίζουμε το ποσό που θέλουμε να χρεώνουμε
Σειρά 3: Αποθηκεύουμε στη μεταβλητή $chosen_gateway την επιλεγμένη μέθοδο πληρωμής
Σειρά 5: Με ένα απλό if ελέγχουμε αν ο χρήστης έχει επιλέξει Αντικαταβολή (cod). Αντίστοιχα αν θέλουμε να προσθέσουμε έξτρα κόστος σε άλλη μέθοδο πληρωμής κάνουμε εδώ τους αντίστοιχους ελέγχους. Οι default τρόποι πληρωμής και τα keys τους είναι
- Αντικαταβολή (cod)
- Τραπεζική μεταφορά (bacs)
- Επιταγή (cheque)
- Paypal (paypal)
Σειρά 7: Συνήθως όμως δε θέλουμε το έξτρα κόστος να χρεώνεται αν ο χρήστης επιλέξει Παραλαβή απο το κατάστημα.
Η function wc_get_chosen_shipping_method_ids() επιστρέφει σε array τους ενεργούς τρόπους αποστολής (σε πιο πολύπλοκα συστήματα οπου μία παραγγελία μπορεί να σπάει σε περισσότερους απο έναν τρόπους αποστολής εδώ μπορεί να έχουμε πάνω απο μία τιμή να επιστρέφεται στο array, ωστόσο στο 99% των περιπτώσεων θα επιστραφεί μόνο μία τιμή).
Σειρά 9: Εδώ ελέγχουμε αν ο επιλεγμένος τρόπος αποστολής ΔΕΝ είναι παραλαβή απο το κατάστημα (το συγκεκριμένο id είναι το local_pickup)
Σειρά 11: Αφού ο χρήστης ΔΕΝ έχει επιλέξει παραλαβή από το κατάστημα τότε προσθέτουμε στο καλάθι ένα έξτρα κόστος με την εντολή WC()->cart->add_fee οπου η πρώτη παράμετρος είναι το κείμενο που θα εμφανίζεται και η δεύτερη παράμετρος είναι το έξτρα ποσό που θα χρεώνεται.
Σχόλια
Barom
Πώς μπορούμε να ρυθμίσουμε το κόστος αντικαταβολής ανά κούριερ; π.χ. Ελτα αντικαταβολή 2,00, Acs αντικαταβολή 1,50 κτλ.
Andreas
Σε ενδιαφέρει με κώδικά ή σαν επιλογή μέσα στο plugin;
Barom
ένα απτα δύο αρκεί να δουλεύει
Andreas
Θες να τσεκάρεις το plugin; Έβγαλα μία νέα έκδοση σήμερα με αυτό το feature και να μου πεις αν σου δουλεύει;
Barom
Θα το δοκιμάσω
Barom
Γεια σας. Το plugin το δοκίμασα για απλή χρήση είναι μια χαρά. Αλλά αυτό που ήθελα να κάνω εγώ (και το έκανα με άλλο τρόπο) ήταν όταν ο πελάτης έχει δωρεάν μεταφορικά, η αντικαταβολή να μην είναι δωρεάν και επίσης ο πελάτης όταν επιλέγει το κουριερ η τιμή αντικαταβολής να είναι ανά κουριερ. Συνήθως όταν έχει δωρεάν μεταφορικά μηδενίζει και την αντικαταβολή ή εισάγεις άλλη τιμή για αντικαταβολή.
Marilena
Αν θέλουμε με κώδικα να προσθέσουμε 2 διαφορετικά ποσά πως θα γίνει;
Δηλαδή αν θέλω π.χ. για την Γενική να χρεώνω αντικαταβολή 1€ αλλά για την ACS να χρεώνω 2€ πως μπορώ να το κάνω;
Andreas
Καλησπέρα,
σε ενδιαφέρει να γίνει αμιγώς με κώδικα; Γιατί το παραπάνω plugin κάνει ακριβώς αυτό, μπορείς να βάλεις στην αντικαταβολή διαφορετικό κόστος ανά μέθοδο αποστολής
Nikolaos Politopoulos
Πως μπορώ να το κάνω αν το ποσό είναι πάνω από πχ 60€ να μηδενίζεται το κόστος αντικαταβολής.
Andreas
Νομίζω σχετικά εύκολα μπορεί να γίνει αυτό. Πάνω από το $cart->add_fee κάνεις έναν έξτρα έλεγχο if ( $cart->subtotal <= 60 ) οπότε αν το subtotal (κόστος προϊόντων + ΦΠΑ χωρίς να μετράει μεταφορικά) είναι μεγαλύτερο από 60 το fee δε θα προστεθεί ποτέ στο καλάθι
Thomas
Καλησπέρα σας, θέλουμε αν γίνεται μετά απο ένα ποσό ή συγκεκριμένο βάρος να μην υπάρχει η δυνατότητα αντικαταβολής .
Andreas
Καλησπέρα,
να απενεργοποιεί γενικά την αντικαταβολή ή το έξτρα κόστος;
Dimitris
Καλησπέρα,
Θέλω να χρησιμοποιήσω το συγκεκριμένο plugin για να ορίσω διαφορετικό κόστος αντικαταβολής στις δυό μεταφορικές εταιρείες που χρησιμοποιούμε. Τις μεταφορικές αυτές τις έχουμε περασμένες στο σύστημα σαν weight based shipping. Και όταν χρησιμοποιώ το plugin και ενεργοποιώ το “διαφορετικά κόστη ανά μέθοδο αποστολής” δεν μου το εμφανίζει. Πως μπορώ να βρω μία λύση πάνω σε αυτό;
Andreas
Για το weight based shipping χρησιμοποιείτε κάποιο συγκεκριμένο plugin; Η αλήθεια είναι πως στο συγκεκριμένο plugin δεν υπάρχει υποστήριξη για κάποιο τέτοιο plugin, ίσως θα μπορούσα να το προσθέσω σε κάποια επόμενη έκδοση αλλά προς το παρόν δεν είναι στα άμεσα σχέδια.
Αν μου λέγατε ποιο plugin χρησιμοποιείτε θα μπορούσα να το δω για το μέλλον
Δημήτρης
Δουλεύει άψογα. Ευχαριστώ.
christos
Καλησπέρα,
Έχω ενεργοποιήσει το plugin αλλά δεν εμφανίζεται στο καλάθι το κόστος αντικαταβολής
ΝΙΚΟΛΑΣ ΠΟΤΑΜΙΑΝΟΣ
Καλησπέρα νεος στον χώρο. Τον κώδικα που τον προσθέτω; Επειδή βλέπω το Plugin δεν μπορεί να κατέβει άλλο.
Ευχαριστώ