WPML Multilingual & Multicurrency for WooCommerce совместим с REST API WordPress. Используя 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+
- клиентская PHP-библиотека WooCommerce REST
- Понятные постоянные ссылки, заданные на странице Настройки → Постоянные ссылки.
Настройка клиентской библиотеки
Как уже упоминалось, Вам понадобится клиентская PHP-библиотека WooCommerce REST. Эта библиотека представляет собой оболочку PHP, которая позволяет более простым способом взаимодействовать с REST API WooCommerce. Вы также можете использовать другие клиентские библиотеки.
Настройка библиотеки в Вашем приложении включает несколько шагов:
-
- Скачайте файлы библиотеки на сервер Вашего сайта с помощью следующей команды Composer:
composer require automattic/woocommerce
-
- Подключите файл автозагрузки библиотеки autoload.php в начале Вашего PHP-кода, используя функцию require.
REST API WCML — подключение файла автозагрузки
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 включена опция Copy taxonomy to translations. Они будут добавлены автоматически.
Соответствующая документация 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: Создание термина атрибута