Home > Software engineering >  How to concatenate the name of a product with the name of its attributes after "woocommerce_tha
How to concatenate the name of a product with the name of its attributes after "woocommerce_tha

Time:12-02

$order_items = $order->get_items();

foreach ($order_items as $item_key => $item) {
 $product = $item->get_product(); // Get the WC_Product Object

 if( $product->is_type( 'variation' ) ){
    $attributes = $product->get_attributes();
    $variation_names = array();

    if( $attributes ){
        foreach ( $attributes as $key => $value) {
            $variation_key =  end(explode('-', $key));
            $variation_names[] = ucfirst($variation_key) .' : '. $value;
        }
    }
    echo implode( '<br>', $variation_names );
 }
}

The output of this code is as follows:

After echo:

چربی

and Incompatible with Persian language

I need the end result to be something like this:

"product Name , color:red, size:85"

CodePudding user response:

You can use wc_attribute_label() to get the proper label name of the attribute and you can use get_title() to get the product title. try the below code.

function display_attributes_and_name( $order_id ){
    $order = wc_get_order($order_id); //<--check this line
    $order_items = $order->get_items();
    foreach ($order_items as $item_key => $item) {
        $product = $item->get_product(); // Get the WC_Product Object
        if( $product->is_type( 'variation' ) ){
            $attributes = $product->get_attributes();
            $variation_names = array();
            if( $attributes ){
                foreach ( $attributes as $key => $value) {
                    $variation_key =  end(explode('-', $key));
                    $variation_names[] = wc_attribute_label( $variation_key ) .' : '. $value;
                }
            }
            echo $product->get_title().', '.implode( ',', $variation_names );
        }
    }
}

add_action( 'woocommerce_thankyou', 'display_attributes_and_name', 10, 1 );

Tested and works

enter image description here

CodePudding user response:

What @Bhautik said

Plus

"Incompatible with Persian language"

To me, it looks like it's been encoded (by your browser perhaps!), so in order to decode it, we could use urldecode function, like so:

$test = 'چربی';

$decode_test = urldecode($test);

echo $decode_test;

Which will output this:

چربی

Does that make sense?

  • Related