WPML

WPML Multilingual & Multicurrency for WooCommerce 与 WordPress REST API 兼容。现在,您可以使用 REST API 创建、读取、更新和删除已翻译的 WooCommerce 内容。


本文档面向希望利用这些功能并在其插件、网站和应用程序中提供多语言 WooCommerce 体验的开发者。

要求


要将 REST API 与 WPML Multilingual & Multicurrency for WooCommerce 结合使用,您需要满足以下条件:
  • WordPress 4.7+
  • WooCommerce 3.9.0+
  • WPML Multilingual & Multicurrency for WooCommerce 4.11.0+
  • WooCommerce REST PHP 客户端库
  • 设置固定链接页面上设置了美观的固定链接。

设置客户端库


如前所述,您需要 WooCommerce REST PHP 客户端库。该库是一个 PHP 封装器,允许以更直接的方式与 WooCommerce REST API 进行交互。您也可以使用其他客户端库。

在您的应用程序中设置该库需要几个步骤:

    1. 使用以下 Composer 命令将库文件下载到您的网站服务器:
composer require automattic/woocommerce
    1. 使用 require 函数在 PHP 代码的开头包含该库的自动加载文件 autoload.php
WCML REST API - 包含自动加载文件
require __DIR__ . '/vendor/autoload.php';

use Automattic\WooCommerce\Client;

$woocommerce = new Client(

   'http://example.com',

   'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',

   'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',

   [

       'wp_api' => true,

       'version' => 'wc/v3',

   ]

);
  • 生成 Consumer KeyConsumer Secret 值。为此,请前往 WooCommerce设置,然后单击 API 选项卡。在那里,单击 Keys/Apps 子选项卡,然后单击 Add Key。在出现的表单中,输入您要授予该用户的 DescriptionUserPermissions,然后单击 Generate API Key
  • 将生成的 Consumer KeyConsumer Secret 值添加到您的 PHP 代码中。
  •  'ck_61f94473aab0445da506e095e664f5d65b153f45'; 'cs_7e60f84b6c87554d249b1ad797d6201566c1009e'; 
    1. 配置使用该库的选项。您可以在官方页面上找到所有选项的说明

    使用 REST API


    现在您已在 PHP 代码中设置了该库,可以开始开发代码要执行的不同操作了。以下列表包含了您可以使用 REST API 和 WPML Multilingual & Multicurrency for WooCommerce 执行的所有主要操作。

    查看订单


    通过在请求中添加 lang 参数,您可以返回指定语言的订单内容。唯一的条件是产品已被翻译成相应的语言。此功能的一个应用场景是查看网站默认语言的订单。

    示例:仅获取以法语下的订单。

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

    相关 WooCommerce 文档:列出所有订单

    查看单个订单


    通过在请求中提供 lang 参数,如果订单是以其他语言下的,则所有项目(如果存在)将显示为指定语言的翻译。

    示例:以英语查看 #110 订单的内容。

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

    相关 WooCommerce 文档:检索订单

    获取产品


    通过添加 lang 参数,您可以获取指定语言的产品。要获取所有语言的所有产品,必须将 lang 参数设置为 all

    示例:仅获取西班牙语产品。

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

    相关 WooCommerce 文档:列出所有产品

    查看单个产品


    返回的数据将包含语言和翻译信息。此外,如果设置了次要货币的自定义价格,并且已启用并配置了多货币模式,则这些价格也将包含在内。

    示例:

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

    此示例的结果将类似于以下内容:

    查看单个产品
    => 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
            )

    相关 WooCommerce 文档:检索产品

    获取产品分类法项(产品类别、标签、属性、配送类型)


    通过添加 lang 参数,您可以获取指定语言的产品分类法项。要获取所有语言的所有项,必须将 lang 参数设置为 all

    示例:获取所有语言的类别。

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

    相关 WooCommerce 文档:列出所有产品类别

    销售报告


    通过添加 currency 参数,您可以获取指定货币的报告。
    销售报告
    $query = [ 'period' => 'year', 'currency' => 'EUR' ];
    $woocommerce->get( 'reports/sales', $query );

    相关 WooCommerce 文档:检索销售报告

    最畅销产品报告


    通过添加 lang 参数,您可以获取指定语言的报告。
    最畅销产品
    $query = [ 'lang' => 'fr' ];
    $woocommerce->get( 'reports/top_sellers', $query );

    相关 WooCommerce 文档:检索最畅销产品报告

    产品总数报告


    通过添加 lang 参数,您可以获取指定语言的报告。
    产品总数
    $query = [ 'lang' => 'fr' ];
    $woocommerce->get( 'reports/products/totals', $query );

    相关 WooCommerce 文档:检索产品总数

    创建产品


    创建产品时支持三个参数:
    • lang – 将为产品设置相应的 lang 值。如果省略,将使用网站的默认语言。
    • translation_of(可选)– 产品将作为现有产品的翻译创建,其 IDtranslation_of 的值提供。如果省略 translation_of,产品将作为新翻译组(trid)的一部分创建。
    • custom_prices – 允许设置次要货币的自定义价格。

    示例:
    创建产品
    $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 );

    要将产品作为另一篇文章的翻译添加,您需要传递 translation_of 参数。如果通过上一次调用创建的文章的 ID 为 23,则以下是添加翻译的代码:

    创建产品作为另一个产品的翻译
    $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);

    请注意,如果类别已被翻译,并且在 WPML 中设置了将分类法复制到翻译中选项,则在添加翻译时无需明确指定它们。它们将被自动添加。

    相关 WooCommerce 文档:创建产品

    可变产品

    创建带有本地属性的产品变体


    创建产品变体时支持三个参数:
    • lang – 将为产品变体设置相应的 lang 值。如果省略,将使用网站的默认语言。
    • translation_of(可选)– 产品变体将作为现有产品变体的翻译创建,其 IDtranslation_of 的值提供。如果省略 translation_of,产品变体将作为新翻译组(trid)的一部分创建。
    • custom_prices – 允许设置次要货币的自定义价格。

    示例:
    创建变体
    $data = [ 'lang'          => 'en',
              'regular_price' => '10',
              'attributes'    => [ [ 'name' => $local_attribute_name, 'option' => 'red' ] ]
    ];
    $woocommerce->post( 'products/{$variable_product_id}/variations', $data );

    要将产品变体作为另一篇文章的翻译添加,您需要传递 translation_of 参数。如果通过上一次调用创建的文章的 ID 为 25,则以下是添加翻译的代码:

    翻译变体
    $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);

    相关 WooCommerce 文档:创建产品变体

    创建带有全局属性的产品变体


    首先,您需要创建并翻译全局项。然后,您可以按照以下示例创建可变产品:
    创建可变产品
    $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);

    然后我们需要创建产品变体。如果原始产品的 ID 为 25,则以下是代码示例:

    创建产品变体
    $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 );

    现在可变产品已用英语创建。要翻译它,请按照以下示例操作:

    创建可变产品的翻译
    $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);

    相关 WooCommerce 文档:批量更新产品变体

    创建订单


    添加 lang 参数将为指定订单设置指定语言。

    请注意,如果产品的添加语言与此处作为参数提供的语言不同,它们将不会被自动转换,而是以其本身的语言添加。

    示例:

    创建订单
    $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 );

    相关 WooCommerce 文档:创建订单

    创建分类法项(产品类别、标签、属性、配送类型)

    请注意,您可以使用 REST API 翻译属性项(例如 Blue),但不能翻译属性名称(例如 Color)。要翻译属性名称,请前往 WPML → 分类法翻译,从下拉菜单中选择属性,并在分类法标签和别名的翻译部分下添加翻译。

    创建项时支持两个参数:
    • lang – 将为该项设置相应的 lang 值。如果省略,将使用网站的默认语言。
    • translation_of(可选)– 该项将作为现有项的翻译创建,其 idtranslation_of 的值提供。如果省略 translation_of,该项将作为新翻译组(trid)的一部分创建

    示例:在第二语言中创建类别。
    创建类别
    $category = [ 'name' => 'Product Category ES', 'translation_of' => $original_category_id, 'lang' => 'es' ];
    $woocommerce->post( 'products/categories', $product_category );

    相关 WooCommerce 文档:创建产品类别

    示例:在次要语言中翻译全局属性项

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

    相关 WooCommerce 文档:创建属性项

    作者:Amir · 最后更新时间:2026年7月1日