/** * Update a Square Item for a WC Product * * @param WC_Product $wc_product * @param object $square_item * @param bool $include_category * @param bool $include_inventory * * @return object|bool Updated Square Item object on success, boolean False on failure. */ public function update_product(WC_Product $wc_product, $square_item, $include_category = false, $include_inventory = false) { $square_item = $this->connect->update_square_product($wc_product, $square_item->id, $include_category, $include_inventory); if (!$square_item) { WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error updating Square Item ID %s (WC Product %d).', $square_item->id, $wc_product->id)); return false; } WC_Square_Utils::update_wc_product_square_id($wc_product->id, $square_item->id); if ('simple' === $wc_product->product_type) { $wc_variations = array($wc_product); } elseif ('variable' === $wc_product->product_type) { $wc_variations = WC_Square_Utils::get_wc_product_variations($wc_product); } foreach ($wc_variations as $wc_variation) { $variation_data = WC_Square_Utils::format_wc_variation_for_square_api($wc_variation, $include_inventory); $wc_variation_id = 'variation' === $wc_variation->product_type ? $wc_variation->variation_id : $wc_variation->id; if ($square_variation_id = WC_Square_Utils::get_wc_variation_square_id($wc_variation_id)) { $result = $this->connect->update_square_variation($square_item->id, $square_variation_id, $variation_data); } else { $result = $this->connect->create_square_variation($square_item->id, $variation_data); if ($result && isset($result->id)) { WC_Square_Utils::update_wc_variation_square_id($wc_variation_id, $result->id); } } if (!$result) { if ($square_variation_id) { WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error updating Square ItemVariation %s for WC Variation %d.', $square_variation_id, $wc_variation_id)); } else { WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error creating Square ItemVariation for WC Variation %d.', $wc_variation_id)); } } } return $square_item; }