Agregar un campo personalizado al checkout de woocommerce

Añade el nuevo campo a la página de checkout de WooCommerce.

add_action( 'woocommerce_after_order_notes', 'agrega_mi_campo_personalizado' );

function agrega_mi_campo_personalizado( $checkout )
{
    echo '<div id="additional_checkout_field"><h2>' . __('Información Adicional') . '</h2>';

    woocommerce_form_field( 'cedula', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Cédula'),
        'placeholder'   => __('Ej: 31157462'),
        ), $checkout->get_value( 'cedula' ));

    echo '</div>';
}

Actualiza la información del pedido con el nuevo campo.

add_action( 'woocommerce_checkout_update_order_meta', 'actualizar_info_pedido_con_nuevo_campo' );

function actualizar_info_pedido_con_nuevo_campo( $order_id )
{
    if ( ! empty( $_POST['cedula'] ) ) {
        update_post_meta( $order_id, 'CEDULA', sanitize_text_field( $_POST['cedula'] ) );
    }
}

Muestra el valor del nuevo campo en la página de edición del pedido.

add_action( 'woocommerce_admin_order_data_after_billing_address', 'mostrar_campo_personalizado_en_admin_pedido', 10, 1 );

function mostrar_campo_personalizado_en_admin_pedido($order)
{
    echo '<p><strong>'.__('Cédula').':</strong> ' . get_post_meta( $order->id, 'CEDULA', true ) . '</p>';
}

Incluye el nuevo campo en el email de notificación del cliente.

add_filter('woocommerce_email_order_meta_keys', 'muestra_campo_personalizado_email');

function muestra_campo_personalizado_email( $keys )
{
    $keys[] = 'CEDULA';
    return $keys;
}