Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save NiBow/e55d3100bb23a3bf0a859b1310500b17 to your computer and use it in GitHub Desktop.

Select an option

Save NiBow/e55d3100bb23a3bf0a859b1310500b17 to your computer and use it in GitHub Desktop.

Revisions

  1. @basepack basepack renamed this gist Mar 10, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. @basepack basepack created this gist Mar 10, 2015.
    295 changes: 295 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,295 @@
    <?php

    //Display Fields
    add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 3 );
    //JS to add fields for new variations
    add_action( 'woocommerce_product_after_variable_attributes_js', 'variable_fields_js' );
    //Save variation fields
    add_action( 'woocommerce_save_product_variation', 'save_variable_fields', 10, 1 );

    /**
    * Create new fields for variations
    *
    */
    function variable_fields( $loop, $variation_data, $variation ) {
    ?>
    <tr>
    <td>
    <?php
    // Text Field
    woocommerce_wp_text_input(
    array(
    'id' => '_text_field['.$loop.']',
    'label' => __( 'My Text Field', 'woocommerce' ),
    'placeholder' => 'http://',
    'desc_tip' => 'true',
    'description' => __( 'Enter the custom value here.', 'woocommerce' ),
    'value' => get_post_meta($variation->ID, '_text_field'], true)
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Number Field
    woocommerce_wp_text_input(
    array(
    'id' => '_number_field['.$loop.']',
    'label' => __( 'My Number Field', 'woocommerce' ),
    'desc_tip' => 'true',
    'description' => __( 'Enter the custom number here.', 'woocommerce' ),
    'value' => get_post_meta($variation->ID, '_number_field'], true),
    'custom_attributes' => array(
    'step' => 'any',
    'min' => '0'
    )
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Textarea
    woocommerce_wp_textarea_input(
    array(
    'id' => '_textarea['.$loop.']',
    'label' => __( 'My Textarea', 'woocommerce' ),
    'placeholder' => '',
    'description' => __( 'Enter the custom value here.', 'woocommerce' ),
    'value' => get_post_meta($variation->ID, '_textarea'], true)
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Select
    woocommerce_wp_select(
    array(
    'id' => '_select['.$loop.']',
    'label' => __( 'My Select Field', 'woocommerce' ),
    'description' => __( 'Choose a value.', 'woocommerce' ),
    'value' => get_post_meta($variation->ID, '_select'], true),
    'options' => array(
    'one' => __( 'Option 1', 'woocommerce' ),
    'two' => __( 'Option 2', 'woocommerce' ),
    'three' => __( 'Option 3', 'woocommerce' )
    )
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Checkbox
    woocommerce_wp_checkbox(
    array(
    'id' => '_checkbox['.$loop.']',
    'label' => __('My Checkbox Field', 'woocommerce' ),
    'description' => __( 'Check me!', 'woocommerce' ),
    'value' => get_post_meta($variation->ID, '_checkbox'], true)
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Hidden field
    woocommerce_wp_hidden_input(
    array(
    'id' => '_hidden_field['.$loop.']',
    'value' => 'hidden_value'
    )
    );
    ?>
    </td>
    </tr>
    <?php
    }

    /**
    * Create new fields for new variations
    *
    */
    function variable_fields_js() {
    ?>
    <tr>
    <td>
    <?php
    // Text Field
    woocommerce_wp_text_input(
    array(
    'id' => '_text_field[ + loop + ]',
    'label' => __( 'My Text Field', 'woocommerce' ),
    'placeholder' => 'http://',
    'desc_tip' => 'true',
    'description' => __( 'Enter the custom value here.', 'woocommerce' ),
    'value' => ''
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Number Field
    woocommerce_wp_text_input(
    array(
    'id' => '_number_field[ + loop + ]',
    'label' => __( 'My Number Field', 'woocommerce' ),
    'desc_tip' => 'true',
    'description' => __( 'Enter the custom number here.', 'woocommerce' ),
    'value' => '',
    'custom_attributes' => array(
    'step' => 'any',
    'min' => '0'
    )
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Textarea
    woocommerce_wp_textarea_input(
    array(
    'id' => '_textarea[ + loop + ]',
    'label' => __( 'My Textarea', 'woocommerce' ),
    'placeholder' => '',
    'description' => __( 'Enter the custom value here.', 'woocommerce' ),
    'value' => '',
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Select
    woocommerce_wp_select(
    array(
    'id' => '_select[ + loop + ]',
    'label' => __( 'My Select Field', 'woocommerce' ),
    'description' => __( 'Choose a value.', 'woocommerce' ),
    'value' => '',
    'options' => array(
    'one' => __( 'Option 1', 'woocommerce' ),
    'two' => __( 'Option 2', 'woocommerce' ),
    'three' => __( 'Option 3', 'woocommerce' )
    )
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Checkbox
    woocommerce_wp_checkbox(
    array(
    'id' => '_checkbox[ + loop + ]',
    'label' => __('My Checkbox Field', 'woocommerce' ),
    'description' => __( 'Check me!', 'woocommerce' ),
    'value' => '',
    )
    );
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <?php
    // Hidden field
    woocommerce_wp_hidden_input(
    array(
    'id' => '_hidden_field[ + loop + ]',
    'value' => 'hidden_value'
    )
    );
    ?>
    </td>
    </tr>
    <?php
    }

    /**
    * Save new fields for variations
    *
    */
    function save_variable_fields( $post_id ) {
    if (isset( $_POST['variable_sku'] ) ) :

    $variable_sku = $_POST['variable_sku'];
    $variable_post_id = $_POST['variable_post_id'];

    // Text Field
    $_text_field = $_POST['_text_field'];
    for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    $variation_id = (int) $variable_post_id[$i];
    if ( isset( $_text_field[$i] ) ) {
    update_post_meta( $variation_id, '_text_field', stripslashes( $_text_field[$i] ) );
    }
    endfor;

    // Number Field
    $_number_field = $_POST['_number_field'];
    for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    $variation_id = (int) $variable_post_id[$i];
    if ( isset( $_text_field[$i] ) ) {
    update_post_meta( $variation_id, '_number_field', stripslashes( $_number_field[$i] ) );
    }
    endfor;

    // Textarea
    $_textarea = $_POST['_textarea'];
    for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    $variation_id = (int) $variable_post_id[$i];
    if ( isset( $_textarea[$i] ) ) {
    update_post_meta( $variation_id, '_textarea', stripslashes( $_textarea[$i] ) );
    }
    endfor;

    // Select
    $_select = $_POST['_select'];
    for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    $variation_id = (int) $variable_post_id[$i];
    if ( isset( $_select[$i] ) ) {
    update_post_meta( $variation_id, '_select', stripslashes( $_select[$i] ) );
    }
    endfor;

    // Checkbox
    $_checkbox = $_POST['_checkbox'];
    for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    $variation_id = (int) $variable_post_id[$i];
    if ( isset( $_checkbox[$i] ) ) {
    update_post_meta( $variation_id, '_checkbox', stripslashes( $_checkbox[$i] ) );
    }
    endfor;

    // Hidden field
    $_hidden_field = $_POST['_hidden_field'];
    for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    $variation_id = (int) $variable_post_id[$i];
    if ( isset( $_hidden_field[$i] ) ) {
    update_post_meta( $variation_id, '_hidden_field', stripslashes( $_hidden_field[$i] ) );
    }
    endfor;

    endif;
    }