Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- * List available attributes on the product page in a drop-down selection
- */
- function list_attributes_on_product_page() {
- global $product;
- $attributes = $product->get_attributes();
- if ( ! $attributes ) {
- return;
- }
- //from original script, but here we want to use it for variable products
- /*if ($product->is_type( 'variable' )) {
- return;
- }*/
- echo '<div style="padding-bottom:15px;">';
- foreach ( $attributes as $attribute ) {
- //If product is variable, and attribute is used for variation: woocommerce already handle this input - so it can also be used with attributes of simple products (not variables)
- if($product->is_type( 'variable' ) && $attribute['variation']) {
- continue;
- }
- //get taxonomy for the attribute - eg: Size
- $taxonomy = get_taxonomy($attribute['name']);
- //get terms - eg: small
- $options = wc_get_product_terms( $product->get_id(), $attribute['name'], array( 'fields' => 'all' ) );
- $label = str_replace('Product ', '', $taxonomy->label);
- //display select input
- ?>
- <div style="padding-bottom:8px;">
- <label for="attribute[<?php echo $attribute['id']; ?>]"><?php echo $label; ?></label>
- <br />
- <!-- add required attribute or not, handle default with "selected" attribute depending your needs -->
- <select 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_action('woocommerce_before_add_to_cart_button', 'list_attributes_on_product_page');
- /**
- * 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'] ?? null;
- 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 );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement