skip to Main Content

we add option to add VAT number to checkout page, it shows ok on checkout page, in admin and in emails, but it don’t save to custom fields.

Here is code:

/**
* VAT Number in WooCommerce Checkout
*/
function wpdesk_vat_field( $checkout ) {
    echo '<div id="wpdesk_vat_field"><h2>' . __('Nakup na podjetje') . '</h2>';
    
    woocommerce_form_field( 'vat_number', array(
        'type'          => 'text',
        'class'         => array( 'vat-number-field form-row-wide') ,
        'label'         => __( 'V kolikor nakupujete kot podjetje, vnesite ID za DDV' ),
        'placeholder'   => __( 'Vnesite ID za DDV' ),
    ), $checkout->get_value( 'vat_number' ));
    
    echo '</div>';
}
add_action( 'woocommerce_checkout_update_order_meta', 'wpdesk_checkout_vat_number_update_order_meta' );
/**
* Save VAT Number in the order meta
*/
function wpdesk_checkout_vat_number_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['vat_number'] ) ) {
        update_post_meta( $order_id, '_vat_number', sanitize_text_field( $_POST['vat_number'] ) );
    }
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'wpdesk_vat_number_display_admin_order_meta', 10, 1 );
/**
 * Display VAT Number in order edit screen
 */
function wpdesk_vat_number_display_admin_order_meta( $order ) {
    echo '<p><strong>' . __( 'ID za DDV', 'woocommerce' ) . ':</strong> ' . get_post_meta( $order->id, '_vat_number', true ) . '</p>';
}
add_filter( 'woocommerce_email_order_meta_keys', 'wpdesk_vat_number_display_email' );
/**
* VAT Number in emails
*/
function wpdesk_vat_number_display_email( $keys ) {
     $keys['ID za DDV'] = '_vat_number';
     return $keys;
}

2

Answers


  1. Chosen as BEST ANSWER

    I add this code to functions.php, but VAT number is not saved to custom fields on order page.

    /**
    * VAT Number in WooCommerce Checkout
    */
    function wpdesk_vat_field( $checkout ) {
        echo '<div id="wpdesk_vat_field"><h2>' . __('Nakup na podjetje') . '</h2>';
        
        woocommerce_form_field( 'vat_number', array(
            'type'          => 'text',
            'class'         => array( 'vat-number-field form-row-wide') ,
            'label'         => __( 'V kolikor nakupujete kot podjetje, vnesite ID za DDV' ),
            'placeholder'   => __( 'Vnesite ID za DDV' ),
        ), $checkout->get_value( 'vat_number' ));
        
        echo '</div>';
    }
    add_action( 'woocommerce_checkout_update_order_meta', 'wpdesk_checkout_vat_number_update_order_meta' );
    /**
    * Save VAT Number in the order meta
    */
    function wpdesk_checkout_vat_number_update_order_meta( $order_id ) {
        if ( ! empty( $_POST['vat_number'] ) ) {
            update_post_meta( $order_id, '_vat_number', sanitize_text_field( $_POST['vat_number'] ) );
        }
    }
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'wpdesk_vat_number_display_admin_order_meta', 10, 1 );
    /**
     * Display VAT Number in order edit screen
     */
    function wpdesk_vat_number_display_admin_order_meta( $order ) {
        echo '<p><strong>' . __( 'ID za DDV', 'woocommerce' ) . ':</strong> ' . get_post_meta( $order->id, '_vat_number', true ) . '</p>';
    }
    add_filter( 'woocommerce_email_order_meta_keys', 'wpdesk_vat_number_display_email' );
    /**
    * VAT Number in emails
    */
    function wpdesk_vat_number_display_email( $keys ) {
         $keys['ID za DDV'] = '_vat_number';
         return $keys;
    }
    

  2. I am using your code in addition I used the woocommerce_before_order_notes hook to add files and working fine for me.

    /**
     * 
    * VAT Number in WooCommerce Checkout
    */
    add_action( 'woocommerce_before_order_notes', 'wpdesk_vat_field' );
    
    function wpdesk_vat_field( $checkout ) {
        echo '<div id="wpdesk_vat_field"><h2>' . __('Nakup na podjetje') . '</h2>';
        
        woocommerce_form_field( 'vat_number', array(
            'type'          => 'text',
            'class'         => array( 'vat-number-field form-row-wide') ,
            'label'         => __( 'V kolikor nakupujete kot podjetje, vnesite ID za DDV' ),
            'placeholder'   => __( 'Vnesite ID za DDV' ),
        ), $checkout->get_value( 'vat_number' ));
        
        echo '</div>';
    }
    add_action( 'woocommerce_checkout_update_order_meta', 'wpdesk_checkout_vat_number_update_order_meta' );
    /**
    * Save VAT Number in the order meta
    */
    function wpdesk_checkout_vat_number_update_order_meta( $order_id ) {
        if ( ! empty( $_POST['vat_number'] ) ) {
            update_post_meta( $order_id, '_vat_number', sanitize_text_field( $_POST['vat_number'] ) );
        }
    }
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'wpdesk_vat_number_display_admin_order_meta', 10, 1 );
    /**
     * Display VAT Number in order edit screen
     */
    function wpdesk_vat_number_display_admin_order_meta( $order ) {
        echo '<p><strong>' . __( 'ID za DDV', 'woocommerce' ) . ':</strong> ' . get_post_meta( $order->id, '_vat_number', true ) . '</p>';
    }
    add_filter( 'woocommerce_email_order_meta_keys', 'wpdesk_vat_number_display_email' );
    /**
    * VAT Number in emails
    */
    function wpdesk_vat_number_display_email( $keys ) {
         $keys['ID za DDV'] = '_vat_number';
         return $keys;
    }
    

    Tested and works.

    Checkout

    enter image description here

    Edit Order

    enter image description here

    Mail

    enter image description here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search