Использование REST API WC WooCommerce для импорта товара

Что такое REST API

Вопрос: Подскажите какие sql запросы использует WooCommerce для полного добавления одного товара(с картинкой). Или есть ли способ отследить какие запросы прилетают к mysql от wordpress?

Ответ: Там не один запрос, а несколько, в разные таблицы. На прямую базу данных WooCommerce лучше не трогать, для это есть REST API WC.

REST API WC WooCommerce документация

  • Устанавливаем библиотеку WooCommerce REST API PHP Library в корень сайта нашего проекта, при помощи Composer
    # composer require automattic/woocommerce
  • Генерируем ключи согласно WooCommerce REST API. Включаем в настройках плагина WooCommerce поддержку REST API. Жмем генерировать ключи, будут созданы 2 ключа: Пользовательский ключ (Consumer Key) и Секретный код пользователя (Consumer Secret). Их обязательно нужно записать!

  • Тестируем подключение REST, для этого при переходе по (подставьте свой домен) https://local.wordpress.dev/wp-json/wc/v2/orders, должен вернуться JSON в браузере. В текущей версии WooCommerce API v2 возвращается ошибка 401. Если и у вас так, то проверку можно осуществить зайдя в корень и получив в ответ огромный массив Json https://local.wordpress.dev/wp-json/wc/v2 или с ключами (получим пустой Json) https://local.wordpress.dev/wp-json/wc/v2/orders?consumer_key=XXXX&consumer_secret=XXXX
  • Настраиваем подключение REST для PHP библиотеки (настройка для нового API REST WooCommerce 2.6 или новее). После подключения выведем все товары нашего магазина.
    <?php
    require __DIR__ . '/vendor/autoload.php';
     
    use Automattic\WooCommerce\Client;
     
    $woocommerce = new Client(
        'http://example.com', 
        'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 
        'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
        [
            'wp_api' => true,
            'version' => 'wc/v2',
        ]
    );
     
    // Вывести все товары
    print_r($woocommerce->get('products'));
    ?>

Формат ответа по умолчанию - json. Запросы с помощью тела сообщений используют простой JSON для установки или обновления атрибутов ресурсов. Успешные запросы возвратят статус 200 OK HTTP.

Общая информация об ответах:

  • Даты возвращаются в формате ISO8601: ГГГГ-ММ-ДДТ:ММ:СС (YYYY-MM-DDTHH:MM:SS)
  • Идентификаторы ресурсов возвращаются как целые числа (Integer).
  • Любая десятичная денежная сумма, такая как цены или итоговые суммы, будет возвращена в виде строк с двумя знаками после запятой.
  • Другие суммы, такие как количество элементов, возвращаются как целые числа.
  • Пустые поля обычно включаются в качестве нулевой или emtpy-строки вместо того, чтобы быть опущены.
  • Поддержка JSONP. WP REST API поддерживает JSONP по умолчанию. Ответы JSONP используют тип содержимого application/javascript. Вы можете указать обратный вызов, используя параметр ?_jsonp для запросов методом get, чтобы получить ответ, завернутый в функцию JSON:
     /wp-json/wc/v2?_jsonp=callback

Как вывести все товары в WooCommerce - казалось бы тривиальный вопрос, но это не так просто. Для каждой версии API вывод всех товаров реализуется по разному.

Суть проблемы связана с пагинацией страниц, в последней версии по умолчанию выводится только 10 товаров. В документации предлагается для вывода всех товаров код PHP, но он выводит только 10

<?php print_r($woocommerce->get('products')); ?>

Много разных советов на просторах интернета, но у меня реально заработал код ниже, спасибо spartanz51. В коде задается массив, в котором указано вывести страницы от 1 до 100, если у вас больше 1000 товаров - увеличивайте ещё.

$page = 1;
$res = $woocommerce->get('products',array('per_page' => 100, 'page' => $page));

WooCommerce вывести все товары принадлежащей категории с id 75.

print_r($wooeto->get('products', array('category' => '75', 'per_page' => '100')));

В этом случае выведется только часть товаров, так как не задан per_page

print_r($wooeto->get('products', array('category' => '75', 'orderby' => 'date')));
PQ VPS сервера в 28+ странах.