In Woocommerce, I am trying to get the display of a custom fee, when the fee amount is zero, to make it appear in the order detail table.
Based on "Update fee dynamically based on radio buttons in Woocommerce checkout" answer code, I have manage to add a dynamic fee that is applied to cart and changes on customer delivery choice.
Here is the working code that I have adapted for my needs:
add_action( 'woocommerce_cart_calculate_fees', 'add_delivery_fee', 20, 1 );
function add_delivery_fee( $cart ) {
$domain = 'woocommerce';
$NipostFST = '2000';
$NIPOSTSUB = '250';
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$packing_fee = WC()->session->get( 'chosen_delivery_option' ); // Dynamic delivery fee
$Dlabel = $packing_fee == 'home_delivery' ? __('To Your Doorstep', $domain) : __('Local Pickup', $domain);
$weight_of_item = WC()->cart->cart_contents_weight;
if ( $weight_of_item > 1 ) {
$nipostFee = $NipostFST + ( ($weight_of_item - 1)*$NIPOSTSUB );
}elseif ( $weight_of_item == 1 ) {
$nipostFee = $NipostFST;
}
$fee = (isset($weight_of_item)) ? $packing_fee == 'home_delivery' ? $nipostFee : 0.00 : 'Not Available';
$cart->add_fee( !is_cart() ? __( 'Delivery Fee [ '.$Dlabel.' ]', $domain ) : __( 'Delivery Fee', $domain ), $fee );
}
// Add a custom radio fields for Delivery Option selection
add_action( 'woocommerce_checkout_before_order_review', 'checkout_delivery_fee_addition', 20 );
function checkout_delivery_fee_addition(){
$domain = 'woocommerce';
$weight_of_item = WC()->cart->cart_contents_weight;
$NipostFST = '2000';
$NIPOSTSUB = '250';
if ( $weight_of_item > 1 ) {
$nipostFee = $NipostFST + ( ($weight_of_item - 1)*$NIPOSTSUB );
}elseif ( $weight_of_item == 1 ) {
$nipostFee = $NipostFST;
}
echo '<div id="izzycart_checkout_addons"><tr class="deliveryOption-select"><th>' . __('Delivery Method', $domain) . '</th><td>';
$chosen = WC()->session->get('chosen_delivery_option');
$chosen = empty($chosen) ? WC()->checkout->get_value('radio_delivery_option') : $chosen;
$chosen = empty($chosen) ? 'local_pickup' : $chosen;
// Add a custom checkbox field
woocommerce_form_field( 'radio_delivery_option', array(
'type' => 'radio',
'class' => array( 'form-row-wide delivery_option' ),
'options' => array(
'local_pickup' => __('Local Pickup '.wc_price(0.00), $domain),
'home_delivery' => (!isset($weight_of_item)) ? __('To Your Doorstep <br><span style="color:red">Not Available</span>', $domain) : __('To Your Doorstep '.wc_price($nipostFee), $domain),
),
'default' => $chosen,
), $chosen );
echo '</td></tr></div>';
}
Now, the problem is that, when customer choose Local Pickup delivery method custom radio button, the applied fee is equal to zero and not displayed at all on order received page, on My account view order page and on all email notifications.
So how to get the display (on orders totals table) just like a normal fee that should look like:
So the displayed total item line will be something like:
Delivery Fee: N0.00