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 进行交互。您也可以使用其他客户端库。
在您的应用程序中设置该库需要几个步骤:
-
- 使用以下 Composer 命令将库文件下载到您的网站服务器:
composer require automattic/woocommerce
-
- 使用 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', ] );
'ck_61f94473aab0445da506e095e664f5d65b153f45'; 'cs_7e60f84b6c87554d249b1ad797d6201566c1009e';
- 配置使用该库的选项。您可以在官方页面上找到所有选项的说明。
使用 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(可选)– 产品将作为现有产品的翻译创建,其 ID 由 translation_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(可选)– 产品变体将作为现有产品变体的翻译创建,其 ID 由 translation_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 文档:创建订单
创建分类法项(产品类别、标签、属性、配送类型)
创建项时支持两个参数:
- lang – 将为该项设置相应的 lang 值。如果省略,将使用网站的默认语言。
- translation_of(可选)– 该项将作为现有项的翻译创建,其 id 由 translation_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 文档:创建属性项