WooCommerce Admin edit order page Custom Order Total calculate

Question

Added advance payment option for woocommerce admin edit order page. It works. But there is a problem here. This error message shows when the advance payment field is empty – “A non-numeric value encountered in …”.

How can this be solved?

add_action( 'woocommerce_admin_order_item_headers', 'calculate_advance_payment', 10, 1);
add_action( 'woocommerce_admin_order_totals_after_discount', 'vp_add_sub_total', 10, 1);
add_action( 'woocommerce_process_shop_order_meta', 'save_order_custom_field_meta_data', 12, 2 );
add_action( 'woocommerce_admin_order_data_after_order_details', 'editable_order_custom_field' );

// Output a custom editable field in backend edit order pages under general section
function editable_order_custom_field( $order ){            

// Get "Delivery Type" from meta data (not item meta data)
$updated_advance_payment = $order->get_meta('_advance_payment');

// Replace "Delivery Type" value by the meta data if it exist
$advancePayment = $updated_advance_payment ? $updated_advance_payment : ( isset($item_value) ? $item_value : '');

// Display the custom editable field
woocommerce_wp_text_input( 
    array(
        'id'            => 'advance_payment',
        'label'         => __("Advance Payment:", "woocommerce"),
        'value'         => $advancePayment,
        'wrapper_class' => 'form-field-wide',
    )
   );
}

// Save the custom editable field value as order meta data and update order item meta data
function save_order_custom_field_meta_data( $post_id, $post ){
if( isset( $_POST[ 'advance_payment' ] )){
    update_post_meta( $post_id, '_advance_payment', sanitize_text_field( $_POST[ 'advance_payment' ] ) );

    // Update the existing item meta data
    if( isset( $_POST[ 'item_id_ref' ] ) ){
        wc_update_order_item_meta( $_POST[ 'item_id_ref' ], 'Advance Payment', $_POST[ 'advance_payment' ] );
    }
}
}

function calculate_advance_payment( $the_order ) {
$getTotal = $the_order->get_total();
$updateTotal = $getTotal - get_post_meta($the_order->get_id(), "_advance_payment", true);
$the_order->set_total($updateTotal);
$the_order->save();
}

function vp_add_sub_total( $the_order ) {
global $post, $the_order; ?>
<tr>
<td class="label">Advance Payment:</td>
<td width="1%"></td>
<td class="total"><?php echo wc_price(get_post_meta($post->ID, "_advance_payment", true));?></td>
</tr><?php
}

Post original source

0
cholonto 2 weeks 2021-05-04T04:57:43-05:00 0 Answers 0 views 0

Leave an answer

Browse
Browse