Skip Navigation

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

Sun Mon Tue Wed Thu Fri Sat
- 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 -
- - - - - - -

Supporter timezone: Asia/Karachi (GMT+05:00)

This topic contains 10 replies, has 2 voices.

Last updated by Waqas Bin Hasan 8 months, 2 weeks ago.

Assisted by: Waqas Bin Hasan.

Author Posts
March 12, 2024 at 4:04 pm #15400634

newcomS

Tell us what you are trying to do?
We are trying to import Products in 3 languages via REST API (German, English, French) but whenever we run our import script the french attributes are not created.

Is there any documentation that you are following?
We followed the woocommerce rest api documentation

Is there a similar example that we can see?
No

What is the link to your site?
hidden link

March 12, 2024 at 5:48 pm #15401002

Waqas Bin Hasan
Supporter

Languages: English (English )

Timezone: Asia/Karachi (GMT+05:00)

Hi,

Thank you for contacting the support.

I'll recommend checking the following guides:

- https://wpml.org/documentation/related-projects/woocommerce-multilingual/using-wordpress-rest-api-woocommerce-multilingual/
- https://wpml.org/documentation/related-projects/woocommerce-multilingual/wcml-hooks-reference/

As well as, updating WordPress to the latest version, so you get latest features and bug fixes.

Remember to take full backup of site and database before updating!

Regards.

March 15, 2024 at 1:04 pm #15414548

newcomS

Hi Waqas

Thank you for your response.

In the meantime we figured out how to create the attributes, but what we're still trying to do, is create the attribute term in the respective language.
We have not found anything in the documentations yet.

Can you help us out with that?

Thanks and Best Regards,
Stefan

March 15, 2024 at 5:38 pm #15415632

Waqas Bin Hasan
Supporter

Languages: English (English )

Timezone: Asia/Karachi (GMT+05:00)

Have you checked "Creating Taxonomy Terms (Product Category, Tag, Attribute, Shipping Class)" section and then at the bottom an example about "Translate Global Attribute Term" like:

$attribute_term = [ 'name' => 'Black ES', 'translation_of' => $original_attribute_term_id, 'lang' => 'es' ];
$woocommerce->post( 'products/attributes/{$attribute_id}/terms', $attribute_term );

Ref: https://wpml.org/documentation/related-projects/woocommerce-multilingual/using-wordpress-rest-api-woocommerce-multilingual/#creating-taxonomy-terms-product-category-tag-attribute-shipping-class

Please note that you can use the REST API to translate Attribute terms (e.g. Blue), but not Attribute names (e.g. Color). To translate Attribute names, go to WooCommerce → WooCommerce Multilingual & Multicurrency. In the Attributes tab, scroll down to the Translations of taxonomy labels and slug section and add the translations.

March 18, 2024 at 8:33 am #15419518

newcomS

We add the Attribute Terms when creating the Product and inside the Product there's an Array with Attributes that looks like the one in the Screenshot.

the "id" parameter is the Attribute assigned to the value and inside the "options" array there's the attribute.

Is it correct, that we have to add the "lang" parameter to the "options" array to achieve the same solution?

Screenshot 2024-03-18 093100.png
March 18, 2024 at 12:37 pm #15420880

newcomS

Following your Reference to the Documentation, we managed to create the attribute terms in the respective languages (german, french, english). But when we try to assign the term to the product via slug, it either doesn't assign it or it creates a new term.

$data = [
'name' => 'FR Test Variable Product',
'type' => 'variable',
'description' => 'FR Test Variable Product for REST',
'lang' => 'fr',
'translation_of' => 25,
'attributes' => [
[
'id' => $global_attribute_id,
'visible' => true,
'variation' => true,
'options' => [
'red-fr' //slug of the attribute term translation
]
]
]
];
$woocommerce->post('products', $data);

This is the reference we're using to create the products just without the the 'translation_of' parameter because we don't want the products to be linked.

March 18, 2024 at 4:28 pm #15422547

Waqas Bin Hasan
Supporter

Languages: English (English )

Timezone: Asia/Karachi (GMT+05:00)

Thank you for the details, I'll try to consult with my team about it. But before moving to that, can you please explain about:

...we don't want the products to be linked.

Aren't you trying to create product attributes in a specific language? And why won't want to link to the product?

March 19, 2024 at 7:31 am #15424219

newcomS

We want to create products with their attributes in different languages, but without the 'translation_of' parameter. That is all.

We need to create the attribute terms in the specific language, so we can use our filter plugin for the products and to display them via grid. as of now, the filter can not see the attribute terms because they are all in the main language german.

thanks for your help.

March 19, 2024 at 9:26 pm #15428923

Waqas Bin Hasan
Supporter

Languages: English (English )

Timezone: Asia/Karachi (GMT+05:00)

Thank you for the updates.

I discussed the matter with my team and they'd like to know about the following scenarios:

1. Create a product in a second language with a term that already exists in the second language.

2. Create a product in a second language with a term that does NOT already exist in the second language.

3. Create a product that is a translation of an existing product with a term that already exists in the second language.

4. It'll also be helpful to know if it works with "translation_of" too.

5. Does $global_attribute_id have a correct value?

Maybe comparing these steps will help figure out where/if things are going wrong. Based on your findings, I'll be able to get more help.

March 20, 2024 at 4:22 pm #15433020

newcomS

During Testing i have encountered another issue.

I create the attribute Term like following:
$attribute_term = [
'name' => $propertie,
'slug' => slugify($propertie.'-'.$lang, true),
'lang' => $lang,
];
$woocommerce->post( 'products/attributes/'.$wc_atts[$attr_id]['id'].'/terms', $attribute_term );

after that it gives me the error: Missing Parameter: name [rest_missing_callback_param]

After the POST call for creating the Attribute, i have tried adding the new term to the Product by slug and by term_id.

And to answer your Question 5: yes, global_attribute_id is correct.

March 20, 2024 at 10:34 pm #15433922

Waqas Bin Hasan
Supporter

Languages: English (English )

Timezone: Asia/Karachi (GMT+05:00)

Thank you for the updates.

Did you get a chance to check other scenarios? And can you share your findings please?

I got some additional info from the team and they confirmed these working. I am sharing some code below from their tests, which may be relevant and be of your interest:

/**
 * Create Global Attribute
 */
$a     = false;
$data3 = [
	'name'         => 'Color',
	'slug'         => 'pa_color',
	'type'         => 'select',
	'order_by'     => 'menu_order',
	'has_archives' => true
];

try {
	$a = $wc->post( 'products/attributes', $data3 );
	
} catch ( Exception $e ) {
	echo "Error:\n";
	print_r( $e->getMessage() );
	
}


if ( $a !== false ) {
	echo "Success:\n";
	echo '<pre>';
	print_r( $a );
	echo '</pre>';
}


/**
 * Create Global Terms
 */
$b     = false;
$data4 = [
	'create' => [
		[
			'name' => 'Blue-en',
			'lang' => 'en'
		],
		[
			'name' => 'Red-en',
			'lang' => 'en'
		]
	]
];

try {
	$b = $wc->post( 'products/attributes/' . $a->id . '/terms/batch', $data4 );
	
} catch ( Exception $e ) {
	echo "Error:\n";
	print_r( $e->getMessage() );
	
}


if ( $a !== false ) {
	echo "Success:\n";
	echo '<pre>';
	print_r( $b );
	echo '</pre>';
}

/**
 * Create Variable Product with Global Attribute
 */
$r    = false;
$data = [
	'name'           => 'Test Variable Product',
	'type'           => 'variable',
	'description'    => 'Test Variable Product for REST',
	'lang'           => 'en',
	'translation_of' => null,
	'attributes'     => [
		[
			'id'        => $a->id,
			'visible'   => true,
			'variation' => true,
			'options'   => [
				'Blue-en',
				'Red-en'
			]
		]
	]
];

try {
	$r = $wc->post( 'products', $data );
	
} catch ( Exception $e ) {
	echo "Error:\n";
	print_r( $e->getMessage() );
	
}


if ( $r !== false ) {
	echo "Success:\n";
	echo '<pre>';
	print_r( $r );
	echo '</pre>';
}

/**
 * Create Product Variation
 */
$y     = false;
$data2 = [
	'create' => [
		[
			'lang'           => 'en',
			'translation_of' => null,
			'regular_price'  => '10',
			'attributes'     => [
				[
					'id'     => $a->id,
					'option' => 'blue-en'
				]
			]
		],
		[
			'lang'           => 'en',
			'translation_of' => null,
			'regular_price'  => '10',
			'attributes'     => [
				[
					'id'     => $a->id,
					'option' => 'red-en'
				]
			]
		]
	],

];

try {
	$y = $wc->post( 'products/' . $r->id . '/variations/batch', $data2 );
	
} catch ( Exception $h ) {
	echo "Error:\n";
	print_r( $h->getMessage() );
	
}


if ( $y !== false ) {
	echo "Success:\n";
	echo '<pre>';
	print_r( $y );
	echo '</pre>';
}

One thing that might interest you, is the use of 'translation_of' => null. Since you don't want to use this param then perhaps set it to null instead of omitting it altogether?

The topic ‘[Closed] Creating Product Attributes in different languages’ is closed to new replies.