Я разрабатываю скрипт, который запускается через CPanel Cron Job для автоматической синхронизации цены и количества на складе всех продуктов WooCommerce с учетной базой данных.
Простые продукты извлекаются по запросу. Но для переменных продуктов количество запросов увеличивается. Следующий код синхронизирует переменные продукты:
$args = array(
'status' => 'publish',
'type' => 'variable',
'limit' => -1,
);
$wooProducts = wc_get_products($args);
foreach ($wooProducts as $wooProduct) {
foreach ($wooProduct->get_children() as $variationID) {
$variation = wc_get_product($variationID);
$isVariationChanged = false;
$variationSKU = $variation->get_sku();
if ($variationSKU == null || $variationSKU == '')
continue;
if ($databasePrice[$variationSKU] != null && ($variation->get_regular_price() != $databasePrice[$variationSKU])) {
$variation->set_regular_price($databasePrice[$variationSKU]);
$isVariationChanged = true;
}
if ($databaseStock[$variationSKU] != null && ((string)$variation->get_stock_quantity() != $databaseStock[$variationSKU])) {
$variation->set_stock_quantity(intval($databaseStock[$variationSKU]));
$isVariationChanged = true;
}
if ($isVariationChanged) {
$variation->save();
}
}
}
Есть ли более оптимизированный / более быстрый способ такой синхронизации?