Nedávno jsem řešil problém
Jak jistě víte, WooCommerce má zpoplatněné pouze možnosti dopravy. Pomocí pluginů (jako je např. Pay for Payment od Karolíny Vyskočilové) lze toto změnit a přidat si i platbu za platbu. Takže platbu za dobírku (neboli platbu při vyzvednutí) můžeme zpoplatnit.
Co dělat, když nechceme zpoplatnit platbu hotově na provozovně?
Můj problém byl následující. Při určité částce za nákup se objeví nová možnost dopravy – doprava zdarma. Ovšem možnosti platby chci ponechat – chci dát zákazníkovi volbu, jestli chce platit až při převzetí zásilky, nebo předem na účet.
Pokud řešíte to samé, pomůže Vám tento kód (patří přímo do souboru functions.php vaší aktivní šablony). Pomocí něj jsem vyřešil, aby se při určitém způsobu dopravy (v tomto případě doprava zdarma) přičetl k objednávce poplatek za dobírku (COD – cash on delivery).
// Přidá poplatek za platbu podmíněný dopravou
add_action( 'woocommerce_cart_calculate_fees', 'add_cod_fee', 20, 1 );
function add_cod_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
## ------ Zde si nastavíte podmínky ------ ##
$your_payment_id = 'cod'; // Platební metoda
$your_shipping_method = 'free_shipping'; // Doručovací metoda
$fee_amount = 69; // Výše poplatku
## ----------------------------------- ##
$chosen_payment_method_id = WC()->session->get( 'chosen_payment_method' );
$chosen_shipping_method_id = WC()->session->get( 'chosen_shipping_methods' )[0];
$chosen_shipping_method = explode( ':', $chosen_shipping_method_id )[0];
if ( $chosen_shipping_method == $your_shipping_method
&& $chosen_payment_method_id == $your_payment_id ) {
$fee_text = __( "Poplatek za dobírku", "woocommerce" );
$cart->add_fee( $fee_text, $fee_amount, false );
}
}
// Kód pro správné obnovování stránky
add_action( 'wp_footer', 'refresh_checkout_script' );
function refresh_checkout_script() {
// Only on checkout page
if( is_checkout() && ! is_wc_endpoint_url('order-received') ) :
?>
<script type="text/javascript">
jQuery(function($){
// On payment method change
$('form.woocommerce-checkout').on( 'change', 'input[name="payment_method"]', function(){
// Refresh checkout
$('body').trigger('update_checkout');
});
})
</script>
<?php
endif;
}
Budeme rádi za Váš názor