WooCommerce 从 Json 文件导入数据

WooCommerce import data from Json File

您好,我创建的用于从 WooCommerce 中的 json 文件导入的插件有问题。 它收集数据,如果产品不存在,它会创建具有其特征的产品(将其放入草稿中),否则它只会更新价格。多达约 100/150 种产品一切正常。在某些时候我有 memory_limit 和 max_excution_time 错误。我尝试将值增加到 1GB。但在某些时候它崩溃了。 代码是:

public function process_products(){

    $file_exist = ABSPATH . '/data/import/data.json';
    if (!file_exists($file_exist)) {
      return;
    };

    $data = file_get_contents($file_exist);
  
    $json_data = json_decode($data, true);

   
  
    $articoli = $json_data["dsDati"]["TArticolo"];
    $articoli_prezzi = $json_data["dsDati"]["TArticoloPrezzo"];
  
    $post_author = wp_get_current_user()->ID;
  
  
    $products = [];
  
    foreach ($articoli as $key => $articolo) {
  
  
      $products[$key]['title'] = $articolo["DescrizioneArticolo"];
      $products[$key]['sku_prodotto'] = $articolo["IdArticolo"];
      $products[$key]['aliquota'] = $articolo["AliquotaIva"];
      $products[$key]['quatity_stock'] = str_replace(' ', '', $articolo["QtaDisp"]);
  
  
  
      foreach ($articoli_prezzi as $key2 => $articolo_prezzo) {
        if ($products[$key]['sku_prodotto'] != null && $articolo_prezzo["Nome"] == 'L1'  && $products[$key]['sku_prodotto'] == $articolo_prezzo["IdArticolo"]) {
          $products[$key]['price'] =  str_replace(' ', '', $articolo_prezzo["Valore"]);
        }
      };
  
  
  
      // cicliamo i prodotti da inserire
      /**
       * #  array(5) {
       *    ["title"]=>
       *    string(39) "ASTA TELESCOPICA DA 32 A 62 CON ZOCCOLO"
       *    ["sku_prodotto"]=>
       *    string(8) "00003590"
       *    ["aliquota"]=>
       *    string(2) "22"
       *    ["quatity_stock"]=>
       *    string(2) "50"
       *    ["price"]=>
       *    string(4) "8.00"
       *  }
       **/
      foreach ($products as $key => $product) {
  
        $product_id_exist = wc_get_product_id_by_sku($product["sku_prodotto"]);
  
        // verifichiamo se il prodotto esiste
  
        // prodotto esistente
        if ($product_id_exist != 0) {
          // inseriamo il prodotto
          $product_to_update = new \WC_Product($product_id_exist);
  
          // aggiorniamo prezzo
          $product_to_update->set_regular_price($product["price"]);
  
          //aggiorniamo quantita
          $product_to_update->set_stock_quantity($product["quatity_stock"]);
  
  
          $product_to_update->save();
  
          continue;
        } else {
  
          // inseriamo il prodotto
          $new_product = new \WC_Product;
          $new_product->set_name($product["title"]);
          $new_product->set_sku($product["sku_prodotto"]);
          $new_product->set_status('draft');
          $new_product->set_regular_price($product["price"]);
          $new_product->set_manage_stock('yes');
          $new_product->set_stock_quantity(absint($product["quatity_stock"]));
          $new_product->save();
  
        }
      }
  
    };
  
   }

我创建了一个每天晚上午夜检查的 cron。问题是有 600 多种产品。有没有办法解决这个问题?感谢有耐心回答的人

我们在插件中使用的简单解决方案是将导入分成多个步骤并更频繁地调用 cron。

制作 data.json 的工作副本(我们称之为 temporary.json),导入 100 个产品,从 temporary.json 并在接下来的 运行 中检查“temporary.json”文件是否存在。如果是这样使用它。如果没有,使用默认的。


这是我们找到的唯一解决方案(适用于所有环境.. 特别是如果您将插件写入 wordpress 插件商店,用户通常无法更改他们的服务器限制)。