Skip to content

Instantly share code, notes, and snippets.

@joseph-farruggio
Created December 10, 2018 21:38
Show Gist options
  • Save joseph-farruggio/75642111de4157558e125b69adab51e6 to your computer and use it in GitHub Desktop.
Save joseph-farruggio/75642111de4157558e125b69adab51e6 to your computer and use it in GitHub Desktop.
WooCommerce Custom Product Fields
<?php
/**
* Output ring size field.
*/
function iconic_output_engraving_field() {
global $product;
$sizes = $product->get_attribute( 'pa_ring-sizes' ); $sizes = explode(", ",$sizes);
if($sizes[0]!=''){ // if product sizes are available ?>
<div class="ring-size-field">
<span class="product-size-label">Choose your ring size:</span>
<select class="product-size" name="ring-size" id="ring-size">
<?php foreach($sizes as $size){ ?>
<option value="<?php echo $size; ?>"><?php echo $size; ?></option>
<?php } ?>
</select>
</div>
<?php }
}
add_action( 'woocommerce_before_add_to_cart_button', 'iconic_output_engraving_field', 10 );
/**
* Add selected ring size to cart item.
*
* @param array $cart_item_data
* @param int $product_id
* @param int $variation_id
*
* @return array
*/
function iconic_add_engraving_text_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
$ring_size = filter_input( INPUT_POST, 'ring-size' );
if ( empty( $ring_size ) ) {
return $cart_item_data;
}
$cart_item_data['ring-size'] = $ring_size;
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'iconic_add_engraving_text_to_cart_item', 10, 3 );
/**
* Display engraving text in the cart.
*
* @param array $item_data
* @param array $cart_item
*
* @return array
*/
function iconic_display_engraving_text_cart( $item_data, $cart_item ) {
if ( empty( $cart_item['ring-size'] ) ) {
return $item_data;
}
$item_data[] = array(
'key' => __( 'Ring Size', 'iconic' ),
'value' => wc_clean( $cart_item['ring-size'] ),
'display' => '',
);
return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'iconic_display_engraving_text_cart', 10, 2 );
/**
* Add selected ring size to order.
*
* @param WC_Order_Item_Product $item
* @param string $cart_item_key
* @param array $values
* @param WC_Order $order
*/
function iconic_add_engraving_text_to_order_items( $item, $cart_item_key, $values, $order ) {
if ( empty( $values['ring-size'] ) ) {
return;
}
$item->add_meta_data( __( 'Ring Size', 'iconic' ), $values['ring-size'] );
}
add_action( 'woocommerce_checkout_create_order_line_item', 'iconic_add_engraving_text_to_order_items', 10, 4 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment