Skip to content
Advertisement

Woocommerce print simple product attributes on cart and checkout, like variable attributes

I want to show attibutes from a simple product, in cart and checkout. Just like variable products does, but there is only one attibute. See image below:

Simple product attribute walkthrough

Is this possible to achive with PHP?

I was thinking about something like using echo $product->get_attributes()

Advertisement

Answer

Add the follows code snippets to achieve your above task –

function modify_woocommerce_get_item_data( $item_data, $cart_item ) {
    if( $item_data || $cart_item['data']->is_type( 'variation' ) ) return $item_data;
    if ( $cart_item['data']->is_type( 'simple' ) ) {
    $attributes = array_filter( $cart_item['data']->get_attributes(), 'wc_attributes_array_filter_visible' );

    foreach ( $attributes as $attribute ) {
        $values = array();

            if ( $attribute->is_taxonomy() ) {
                $attribute_taxonomy = $attribute->get_taxonomy_object();
                $attribute_values   = wc_get_product_terms( $cart_item['data']->get_id(), $attribute->get_name(), array( 'fields' => 'all' ) );

                foreach ( $attribute_values as $attribute_value ) {
                    $value_name = esc_html( $attribute_value->name );

                    if ( $attribute_taxonomy->attribute_public ) {
                        $values[] = '<a href="' . esc_url( get_term_link( $attribute_value->term_id, $attribute->get_name() ) ) . '" rel="tag">' . $value_name . '</a>';
                    } else {
                        $values[] = $value_name;
                    }
                }
            } else {
                $values = $attribute->get_options();

                foreach ( $values as &$value ) {
                    $value = make_clickable( esc_html( $value ) );
                }
            }

            $item_data[] = array(
                'key'   => wc_attribute_label( $attribute->get_name() ),
                'value' => apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values ),
            );
        }
    }
    return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'modify_woocommerce_get_item_data', 99, 2 );

Codes goes to your active theme’s functions.php

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement