15 октября, 2021

WooCommerce

В состав конфигурации «Простой учет» добавлена обработка для поддержки обмена данными с интернет-магазином, использующим плагин WooCommerce для WordPress. Как и с остальными магазинами, есть возможность обновлять цены товаров на сайте по данным из 1С и загружать оставленные покупателями заказы сразу в документ «Расходная накладная».

В процессе написания обработки пришлось разложить по полочкам схему данных магазина, при этом сначала меня удивила концепция: все основные сведения хранить в таблице posts. Т.е. там лежат и данные о товарах, и данные о заказах, сам WordPress там хранит данные постов. На деле оказалось, что для целей обмена данными к этой таблице обращаться практически не приходится — нужные параметры разбросаны по множеству дополнительных таблиц.

WooCommerce shema
схема связи данных в таблицах WordPress и WooCommerce

Так например, чтобы узнать, есть-ли заказы ожидающие обработки, нужно прочитать из таблицы term_relationships записи со значением поля term_taxonomy_id равным коду статуса «ожидание». Поле записи object_id будет содержать код заказа, а по сути это id записи в таблице posts соответствующей искомому заказу. Содержимое заказа лежит в таблице woocommerce_itemmeta, здесь надо сделать выборку по полю order_item_id (id заказа) и перечитать содержимое в полях meta_key и meta_value. Это еще одна «фишка» этого плагина: значения записаны не в отдельных полях таблицы, а вписаны в две колонки таблицы по принципу: одна колонка содержит ключ, вторая — значение. Т.е перебирая строки нужно анализировать значения ключа, к примеру в строке с ключом «_qty» получим количество, «_line_total» — сумма товара по строке и т.д. По такому-же принципу «спрятаны» данные и заголовка заказа с именем покупателя, телефоном и прочим, только уже в таблице postmeta.