Skip Navigation
Updated
March 5, 2021

WooCommerce Multilingual is compatible with the WordPress REST API. Using the REST API, you can now create, read, update, and delete translated WooCommerce content.

This document is intended for developers who want to leverage these features and offer multilingual WooCommerce experience in their plugins, sites and applications.

Requirements

To use the REST API with WooCommerce Multilingual you need the following:

Setting Up The Client Library

As mentioned, you need the WooCommerce REST PHP client library. This library is a PHP wrapper which allows interaction with the WooCommerce REST API in a more straightforward way. You can use other client libraries as well.

Setting up the library inside your application involves a few steps:

  1. Download the library files to your site’s server using the following Composer command:
  2. composer require automattic/woocommerce
  3. Include the library auto-loading file, autoload.php, at the start of your PHP code using the require function.
  4. Generate the Consumer Key and Consumer Secret values. To do this, go to WooCommerceSettings and click the API tab. There, click the Keys/Apps sub-tab and click Add Key. In the form that appears, enter the Description, User and Permissions you want to grant the user, and click Generate API Key.
  5. Add the generated Consumer Key and Consumer Secret values to your PHP code.

     'ck_61f94473aab0445da506e095e664f5d65b153f45'; 'cs_7e60f84b6c87554d249b1ad797d6201566c1009e'; 
  6. Configure the options for using the library. You can find the description of all the options on the official page.

Using the REST API

Now that you set up the library in your PHP code, you can start developing different actions for your code to perform. The following list features all main actions you can perform using REST API and WooCommerce Multilingual.

View orders

By adding the lang parameter to the request, you can return the contents of orders in specified languages. The only condition is that products are translated into the respective language. One application of this is seeing the orders in the site’s default language.

Example: Get only the orders placed in French.

$orders = $woocommerce->get('orders', array( 'per_page' => 25, 'lang' => 'fr' ) );

Related WooCommerce Documentation: View-list of orders

View Single Order

By providing a lang parameter to the request, if the order was placed in a different language, all items, if they exist, will be displayed as translations in the specified language. Example: See contents of order #110 in English.

$order = $woocommerce->get('orders/110', array( 'lang' => 'en' ) );

Related WooCommerce Documentation: Retrieve an order

Get products

By adding the lang parameter, you can get products in a specified language. To get all products in all languages the lang parameter must be set to all.

Example: Get only the Spanish products.

$products = $woocommerce->get('products', array( 'per_page' => 25, 'lang' => 'es' ) );

Related WooCommerce Documentation: List all products

View Single Product

You can add language and translation information to the returned data, using the following two parameters:

  • Use the lang parameter to show the language of the queried product
  • Use the translations parameter, which is an associative array of product IDs for translations in other languages

The output will also include custom prices in secondary currencies if those prices were set and the multi-currency mode is enabled and configured.

Example:

$product = $woocommerce->get('products/99');

A result of this example would be similar to the following:

View Single Product
=> stdClass Object
        (
            [title] => An English product
            [id] => 28
            [created_at] => 2015-06-08T08:56:49Z
            [updated_at] => 2015-06-08T08:56:49Z
            [type] => simple
            [status] => publish
            [downloadable] =>
            [virtual] =>
            [permalink] => http://example.com/shop/a-simple-english-product
            [sku] =>
            [price] => 100.00
            [regular_price] => 100.00
            [sale_price] =>
            [price_html] => $100.00
            …
            [variations] => Array
                (
                )
 
            [parent] => Array
                (
                )
 
            [translations] => stdClass Object
                (
                    [bg] => 31
                    [es] => 30
                )
 
           [lang] => en,
            [multi-currency-prices] => Array
     (
         'EUR' => Array
      (
        'regular_price' => 127,
'sale_price' => 100
         ),
         'USD' => Array
      (
        'regular_price' => 156,
'sale_price' => 130
         )
     )
        )

Related WooCommerce Documentation: Retrieve a product

Get Product Taxonomy Terms (Product Categories, Tags, Attributes, Shipping Classes)

By adding the lang parameter, you can get product taxonomy term in a specified language. To get all terms in all languages the lang parameter must be set to all.

Example: Get categories in all languages.

$categories= $woocommerce->get('products/categories', array( 'per_page' => 10, 'lang' => 'all' ) );

Related WooCommerce Documentation: List all product categories

Sales Reports

By adding the currency parameter, you can get reports in a specified currency.

Sales Report
$query = [ 'period' => 'year', 'currency' => 'EUR' ];
$woocommerce->get( 'reports/sales', $query );

Related WooCommerce Documentation: Retrieve sales report

Top Sellers Reports

By adding the lang parameter, you can get reports in a specified language.

Top Sellers
$query = [ 'lang' => 'fr' ];
$woocommerce->get( 'reports/top_sellers', $query );

Related WooCommerce Documentation: Retrieve top sellers report

Products Totals Reports

By adding the lang parameter, you can get reports in a specified language.

Products Totals
$query = [ 'lang' => 'fr' ];
$woocommerce->get( 'reports/products/totals', $query );

Related WooCommerce Documentation: Retrieve products totals

Create products

Three parameters are supported when creating a product:

  • lang – the respective lang value will be set for the product. If omitted, the default language of the site will be used.
  • translation_of (optional) – the product will be created as a translation of an existing product, having the ID provided by the value of translation_of. If translation_of is omitted, the product is created as part of a new translation group (trid)
  • custom_prices – allows settings custom prices in secondary currencies

Example:

Create Products
$data    = [
	'name'              => 'English Test Post',
	'type'              => 'simple',
	'regular_price'     => '10.00',
	'description'       => 'This is a Simple English Test Post',
	'short_description' => 'This is a Simple English Test Post',
	'categories'        => [ [ 'id' => 10 ], [ 'id' => 12 ] ],
	'images'            => [
		[ 'src' => 'https://example.com/image-1.png', 'position' => 0 ],
		[ 'src' => 'https://example.com/image-2.png', 'position' => 1 ]
	],
	'lang'              => 'en',
	'custom_prices'     => [
		'EUR' => [ 'regular_price' => 1999, 'sale_price' => 1500 ],
		'USD' => [ 'regular_price' => 2100, 'sale_price' => 2099 ]
	]
];
$product = $woocommerce->post( 'products', $data );

To add a product as a translation of another post, you need to pass the translation_of parameter. If the post that was created with the previous call has an ID of 23, the following would be the code for adding a translation:

Creating a product as translation of another one
$data = [

'name' => 'French Test Post',

'type' => 'simple',

'regular_price' => '10.00',

'description' => 'This is a Simple French Test Post',

'short_description' => 'This is a Simple French Test Post',

'lang' => 'fr',

'translation_of' => '23'

];



$product = $woocommerce->post('products', $data);

Note that if the categories are already translated, you don’t need to specify them explicitly when adding the translation if the Copy taxonomy to translations option is set in WPML. They will be added automatically.

Related WooCommerce Documentation: Create a product

Variable Products

Create product variations with local attribute

Three parameters are supported when creating a product variation:

  • lang – the respective lang value will be set for the product variation. If omitted, the default language of the site will be used.
  • translation_of (optional) – the product variation will be created as a translation of an existing product variation, having the ID provided by the value of translation_of. If translation_oftrid)
  • custom_prices – allows settings custom prices in secondary currencies

Example:

Create Variation
$data = [ 'lang'          => 'en',
          'regular_price' => '10',
          'attributes'    => [ [ 'name' => $local_attribute_name, 'option' => 'red' ] ]
];
$woocommerce->post( 'products/{$variable_product_id}/variations', $data );

To add a product variation as a translation of another post, you need to pass the translation_of parameter. If the post that was created with the previous call has an ID of 25, the following would be the code for adding a translation:

Translate Variation
$data = [
	'name'           => 'Translation of Variable Product',
	'type'           => 'variable',
	'description'    => 'Translate of Product Description',
	'lang'           => 'fr',
	'translation_of' => 25,
	'attributes'     => [
		[
			'name'      => $local_attribute_name,
			'visible'   => true,
			'variation' => true,
			'options'   => [
				'$translation_of_red'
			]
		]
	]
];
$woocommerce->post('products', $data);

Related WooCommerce Documentation: Create a product variation

Create Product Variations with Global Attribute

First, you need to create and translate the global terms. Then, you can create the variable product by following the example below:

Create variable product
$data = [
	'name'           => 'Test Variable Product',
	'type'           => 'variable',
	'description'    => 'Test Variable Product for REST',
	'lang'           => 'en',
	'translation_of' => null,
	'attributes'     => [
		[
			'id'   =>  $global_attribute_id,
			'visible'   => true,
			'variation' => true,
			'options'   => [
				'Red'
			]
		]
	]
];
$woocommerce->post('products', $data);

Then we need to create product variations. If the original product has an ID of 25, then the following would be an example of the code:

Create product variations
$data = [
	'create' => [
		[
			'lang'           => 'en',
			'translation_of' => null,
			'regular_price'  => '10',
			'attributes'     => [
				[
					'id'     => $global_attribute_id,
					'option' => 'blue-en' //we need to add here the attribute term slug
				]
			]
		]
$woocommerce->post( 'products/25/variations/batch', $data );

Now the variable products have been created in English. To translate it, follow the example below:

Create translation of a variable product
$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);

Related WooCommerce Documentation: Batch update product variations

Create an Order

Adding a lang parameter will set the specified language for the specified order.

Please note that the products, if added in a different language than the one provided as an argument here, will not be converted automatically but instead be added in their language.

Example:

Create an order
$data = [
    'payment_details' => [
        'method_id' => 'bacs',
        'method_title' => 'Direct Bank Transfer',
        'paid' => true
    ],
    'billing_address' => [
        'first_name' => 'John',
        'last_name' => 'Doe',
        'address_1' => '969 Market',
        'address_2' => '',
        'city' => 'San Francisco',
        'state' => 'CA',
        'postcode' => '94103',
        'country' => 'US',
        'email' => 'john.doe@example.com',
        'phone' => '(555) 555-5555'
    ],
    'shipping_address' => [
        'first_name' => 'John',
        'last_name' => 'Doe',
        'address_1' => '969 Market',
        'address_2' => '',
        'city' => 'San Francisco',
        'state' => 'CA',
        'postcode' => '94103',
        'country' => 'US'
    ],
    'customer_id' => 2,
    'line_items' => [
        [
            'product_id' => 58,
            'quantity' => 2
        ],
    ],
    'shipping_lines' => [
        [
            'method_id' => 'flat_rate',
            'method_title' => 'Flat Rate',
            'total' => 10
        ]
    ],
    'lang' => 'el'
    'currency' => 'usd'
];
$order = $woocommerce->post('orders', $data );

Related WooCommerce Documentation: Create an order

Creating Taxonomy Terms (Product Category, Tag, Attribute, Shipping Class)

Two parameters are supported when creating a term:

  • lang – the respective lang value will be set for the term. If omitted, the default language of the site will be used.
  • translation_of (optional) – the term will be created as a translation of an existing term, having the id provided by the value of translation_of. If translation_of is omitted, the term is created as part of a new translation group (trid)

Example: Create a category in the second language.

Create Category
$category = [ 'name' => 'Product Category ES', 'translation_of' => $original_category_id, 'lang' => 'es' ];
$woocommerce->post( 'products/categories', $product_category );

Related WooCommerce Documentation: Create a product category

Example: Translate a global attribute term in the secondary language
Please note: It is not currently possible to translate the attribute name using the REST API. This must be done manually from the WCML dashboard in your site’s backend.

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

Related WooCommerce Documentation: Create an attribute term