Skip to content

Instantly share code, notes, and snippets.

@mikejolley
Created January 13, 2012 00:31
Show Gist options
  • Select an option

  • Save mikejolley/1604009 to your computer and use it in GitHub Desktop.

Select an option

Save mikejolley/1604009 to your computer and use it in GitHub Desktop.

Revisions

  1. mikejolley created this gist Jan 13, 2012.
    94 changes: 94 additions & 0 deletions gistfile1.aw
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    /**
    * 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"><h3>'.__('My Field').'</h3>';

    /**
    * Output the field. This is for 1.4.
    *
    * To make it compatible with 1.3 use $checkout->checkout_form_field instead:

    $checkout->checkout_form_field( 'my_field_name', array(
    'type' => 'text',
    'class' => array('my-field-class orm-row-wide'),
    'label' => __('Fill in this field'),
    'placeholder' => __('Enter a number'),
    ));
    **/
    woocommerce_form_field( 'my_field_name', array(
    'type' => 'text',
    'class' => array('my-field-class orm-row-wide'),
    'label' => __('Fill in this field'),
    'placeholder' => __('Enter a number'),
    ), $checkout->get_value( 'my_field_name' ));

    echo '</div>';

    /**
    * Optional Javascript to limit the field to a country. This one shows for italy only.
    **/
    ?>
    <script type="text/javascript">
    jQuery('select#billing_country').live('change', function(){

    var country = jQuery('select#billing_country').val();

    var check_countries = new Array(<?php echo '"IT"'; ?>);

    if (country && jQuery.inArray( country, check_countries ) >= 0) {
    jQuery('#my_custom_checkout_field').fadeIn();
    } else {
    jQuery('#my_custom_checkout_field').fadeOut();
    jQuery('#my_custom_checkout_field input').val('');
    }

    });
    </script>
    <?php
    }

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

    function my_custom_checkout_field_process() {
    global $woocommerce;

    // Check if set, if its not set add an error. This one is only requite for companies
    if ($_POST['billing_company'])
    if (!$_POST['my_field_name'])
    $woocommerce->add_error( __('Please enter your XXX.') );
    }

    /**
    * Update the user meta with field value
    **/
    add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');

    function my_custom_checkout_field_update_user_meta( $user_id ) {
    if ($user_id && $_POST['my_field_name']) update_user_meta( $user_id, 'my_field_name', esc_attr($_POST['my_field_name']) );
    }

    /**
    * Update the 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 ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
    }

    /**
    * Add the field to order emails
    **/
    add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');

    function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = 'My Field';
    return $keys;
    }