Loading...
12
106

Πως να προσθέσω έξοδα αντικαταβολής στο woocommerce;

16/05/2021
3 λεπτά

Συχνά μας παρουσιάζεται η ανάγκη να προσθέσουμε κάποιο έξτρα κόστος σε κάποιους τρόπους πληρωμής (συνήθως στην αντικαταβολή αλλά μπορεί να τύχει σε οποιαδήποτε μέθοδο πληρωμής). Εαν δε θέλουμε κάτι πολύπλοκο καλό θα ήταν να γίνει χωρίς τη χρήση 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 οπου η πρώτη παράμετρος είναι το κείμενο που θα εμφανίζεται και η δεύτερη παράμετρος είναι το έξτρα ποσό που θα χρεώνεται.

Θέλετε να σχολιάσετε;

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

Ας συνεργαστούμε.
Επικοινωνήστε μαζί μας