|
|
@@ -0,0 +1,94 @@ |
|
|
<?php |
|
|
|
|
|
|
|
|
/** |
|
|
* List available attributes on product page in a drop-down selection |
|
|
*/ |
|
|
add_action('woocommerce_before_add_to_cart_button', 'list_attributes_on_product_page'); |
|
|
function list_attributes_on_product_page() { |
|
|
global $product; |
|
|
$attributes = $product->get_attributes(); |
|
|
|
|
|
if ( ! $attributes ) { |
|
|
return; |
|
|
} |
|
|
|
|
|
if ($product->is_type( 'variable' )) { |
|
|
return; |
|
|
} |
|
|
|
|
|
echo '<div style="padding-bottom:15px;">'; |
|
|
|
|
|
foreach ( $attributes as $attribute ) { |
|
|
$taxonomy = get_taxonomy($attribute['name']); |
|
|
$options = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'all' ) ); |
|
|
$label = str_replace('Product ', '', $taxonomy->label); |
|
|
?> |
|
|
<div style="padding-bottom:8px;"> |
|
|
<label for="attribute[<?php echo $attribute['id']; ?>]"><?php echo $label; ?></label> |
|
|
<br /> |
|
|
<select required name="attribute[<?php echo $attribute['id']; ?>]" id="attribute[<?php echo $attribute['id']; ?>]"> |
|
|
<option value disabled selected>Choose an option</option> |
|
|
<?php foreach ( $options as $pa ): ?> |
|
|
<option value="<?php echo $pa->name; ?>"><?php echo $pa->name; ?></option> |
|
|
<?php endforeach; ?> |
|
|
</select> |
|
|
</div> |
|
|
<?php |
|
|
} |
|
|
|
|
|
echo '</div>'; |
|
|
} |
|
|
|
|
|
/** |
|
|
* Add selected attributes to cart items |
|
|
*/ |
|
|
add_filter('woocommerce_add_cart_item_data', 'add_attributes_to_cart_item', 10, 3 ); |
|
|
function add_attributes_to_cart_item( $cart_item_data, $product_id, $variation_id ) { |
|
|
$attributes = $_POST['attribute']; |
|
|
|
|
|
if (empty( $attributes ) ) { |
|
|
return $cart_item_data; |
|
|
} |
|
|
|
|
|
$cart_item_data['attributes'] = serialize($attributes); |
|
|
|
|
|
return $cart_item_data; |
|
|
} |
|
|
|
|
|
/** |
|
|
* Display attributes in cart |
|
|
*/ |
|
|
add_filter( 'woocommerce_get_item_data', 'display_attributes_in_cart', 10, 2 ); |
|
|
function display_attributes_in_cart( $item_data, $cart_item ) { |
|
|
if ( empty( $cart_item['attributes'] ) ) { |
|
|
return $item_data; |
|
|
} |
|
|
|
|
|
foreach (unserialize($cart_item['attributes']) as $attributeID => $value) { |
|
|
$attribute = wc_get_attribute($attributeID); |
|
|
$item_data[] = array( |
|
|
'key' => $attribute->name, |
|
|
'value' => $value, |
|
|
'display' => '', |
|
|
); |
|
|
} |
|
|
|
|
|
return $item_data; |
|
|
} |
|
|
|
|
|
/** |
|
|
* Add attribute data to order items |
|
|
*/ |
|
|
add_action( 'woocommerce_checkout_create_order_line_item', 'add_attributes_to_order_items', 10, 4 ); |
|
|
function add_attributes_to_order_items( $item, $cart_item_key, $values, $order ) { |
|
|
if ( empty( $values['attributes'] ) ) { |
|
|
return; |
|
|
} |
|
|
|
|
|
foreach (unserialize($values['attributes']) as $attributeID => $value) { |
|
|
$attribute = wc_get_attribute($attributeID); |
|
|
$item->add_meta_data( $attribute->name, $value ); |
|
|
} |
|
|
} |
|
|
|