Agregue un campo personalizado para finalizar la compra y para my_account detalles del usuario en el registro

Tengo un sitio de WooCommerce que estoy construyendo y quiero agregar la fecha de nacimiento del usuario a la ficha de usuario en la base de datos, así como mostrarla en el wp-admin debajo de su perfil.

Tengo experiencia limitada en jugar con PHP.

Me he retirado de los documentos de Woocommerceaquí para mostrarlo al finalizar la compra, lo que está haciendo correctamente.

Los documentos de Woocommerce le muestran cómo agregarlo a la información del pedido, pero no a la cuenta de usuario en sí. Se está agregando correctamente al pedido pero no a la cuenta.

Esto es lo que tengo hasta ahora:

/**
 * Add the field to the checkout
 */
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

function my_custom_checkout_field( $checkout ) {

    echo '<div id="my_custom_checkout_field">';

    woocommerce_form_field( 'birthdate', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Date of Birth'),
        'placeholder'   => __('mm/dd/yyyy'),
        ), $checkout->get_value( 'birthdate' ));

    echo '</div>';

}

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['birthdate'] )
        wc_add_notice( __( 'Please enter your date of birth.' ), 'error' );
}

/**
 * update order meta with field value
 */

add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );


function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['birthdate'] ) ) {
        update_post_meta( $order_id, 'Birthdate', sanitize_text_field( $_POST['birthdate'] ) );
    }
}

/**
 * update user meta with birthdate
 */

add_action ( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action ( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id )
{
    if ( ! empty( $_POST['birthdate'] ) ) {
        update_usermeta( $user_id, 'Birthdate', sanitize_text_field( $_POST['birthdate'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
add_action ( 'show_user_profile', 'my_custom_checkout_field_display_admin_order_meta' );
add_action ( 'edit_user_profile', 'my_custom_checkout_field_display_admin_order_meta' );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Birthdate').':</strong> ' . get_post_meta( $order->id, 'Birthdate', true ) . '</p>';
}

También recibo este error en la página de información del usuario:

Notice: WP_User->id was called with an argument that is deprecated since 
version 2.1.0! Use WP_User->ID instead. in 
/Applications/MAMP/htdocs/tst_dev/wp-includes/functions.php on line 3891

También he intentado esto en lugar de mi versión del meta de actualización del usuario.

add_action( 'user_register', 'my_custom_update_user');

function my_custom_update_user( $user_id )
{        
    if ( $user_id != 0 ) {             // check if user is not a guest
            update_usermeta( $user_id, 'Birthdate', sanitize_text_field( $_POST['birthdate'] ) );
        }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta