setUnserializeMetaKey('KbAmzVariations'); getKbAmz()->setUnserializeMetaKey('KbAmzVersions'); /** * Set the first variant */ add_action('loop_start', 'kbAmzReplaceVariantParent', -99999); function kbAmzReplaceVariantParent($query) { if (!getKbAmz()->getOption('allowVariants')) { return $query; } if (!empty($query->posts) && count($query->posts) == 1) { $post = $query->posts[0]; if (getKbAmz()->isPostProduct($post->ID)) { $variant = getKbAmz()->getProductFirstVariant($post->ID); if ($variant) { $query->posts[0] = $variant; } } } return $query; } /** [AlternateVersions] => Array ( [AlternateVersion] => Array ( [0] => Array ( [ASIN] => 0008135126 [Title] => The Queen's Orang-Utan [Binding] => Hardcover ) [1] => Array ( [ASIN] => 0008135134 [Title] => The Queen's Orang-Utan (Comic Relief) [Binding] => Paperback ) [2] => Array ( [ASIN] => B00S4DWGIO [Title] => The Queen's Orang-Utan [Binding] => Kindle Edition ) ) ) ) */ add_action('KbAmazonImporter::saveProduct', 'kbAmzVariantsProductpreSaveAlternateVersions'); function kbAmzVariantsProductpreSaveAlternateVersions($std) { if (!getKbAmz()->getOption('allowVariants')) { return $std; } $item = $std->item; $postId = $std->postId; $post = $std->post; $postExists = $std->postExists; $importer = $std->importer; if (/*$postExists ||*/ !$postId || !$item->isValid() || $post->post_parent) { return $std; } $result = $item->getResult(); if (!isset($result['Items']['Item']['AlternateVersions']['AlternateVersion'])) { return $std; } $versions = $result['Items']['Item']['AlternateVersions']['AlternateVersion']; $meta = array(); $meta['Versions'] = $versions; $toDownload = array(); $num = getKbAmz()->getOption('maxVersionsNumberOnImport'); $i = 0; foreach ($versions as $version) { if (!isset($version['ASIN'])) { continue; } $asin = $version['ASIN']; if (getKbAmz()->getProductByAsin($asin)) { continue; } if (++$i > $num) { $toDownload[] = $asin; } $versionItem = $importer->find($asin); if (!$versionItem->isValid()) { continue; } $itemData = $versionItem->getItem(); if (isset($version['Binding'])) { $itemData['ItemAttributes']['Title'] .= ' ('.$version['Binding'].')'; } $versionItemData = array( 'Items' => array( 'Item' => array_merge($item->getItem(), $itemData) ) ); $versionItem = new KbAmazonItem($versionItemData); $versionItem->setPostParent($postId); $saveResult = $importer->saveProduct($versionItem); $importer->updateProductPostMeta($meta, $saveResult['post_id']); $std->result['children'][] = $postId; } $importer->updateProductPostMeta($meta, $postId); if (!empty($toDownload)) { $similarProducts = kbMergeUnique(getKbAmz()->getOption('ProductsToDownload', array()), $toDownload); getKbAmz()->setOption( 'ProductsToDownload', $similarProducts ); } return $std; } /** * Standard Product Variants */ add_action('KbAmazonImporter::saveProduct', 'kbAmzVariantsProductSave'); function kbAmzVariantsProductSave($std) { if (!getKbAmz()->getOption('allowVariants')) { return $std; } /** * @TODO disable reupdating, becase variants are products and will get imported */ $importer = $std->importer; $postId = $std->postId; $post = get_post($postId); $item = $std->item; $isUpdate = $std->update; $result = $item->getResult(); $parentItem = $result['Items']['Item']; if (!isset($parentItem['Variations']) || empty($parentItem['Variations'])) { return; } $variations = $parentItem['Variations']; $items = $variations['Item']; unset($parentItem['Variations'], $variations['Item']); foreach ($items as $item) { if (!isset($item['ASIN'])) { continue; } $variations['Items'][] = array( 'ASIN' => $item['ASIN'] ); // $variantItem = $importer->find($item['ASIN']); // if (!$variantItem->isValid()) { // continue; // } $item['IsVariant'] = true; if (!isset($item['VariationAttributes']['VariationAttribute'][0])) { $item['VariationAttributes']['VariationAttribute'] = array($item['VariationAttributes']['VariationAttribute']); } if ($item['ItemAttributes']['Title'] == $post->post_title) { $addup = array(); foreach ($item['VariationAttributes']['VariationAttribute'] as $pair) { $addup[] = $pair['Name'] . ' ' . $pair['Value']; } $item['ItemAttributes']['Title'] .= ' (' . implode(' ', $addup) . ')'; } $variantItemData = array( 'Items' => array( 'Item' => array_merge($parentItem, $item) ) ); $variantItem = new KbAmazonItem($variantItemData); if ($importer->itemExists($variantItem) && $isUpdate) { $saveResult = $importer->updateProduct($variantItem); } else { $saveResult = $importer->saveProduct($variantItem); } if (isset($saveResult['post_id']) && $saveResult['post_id']) { $std->result['children'][] = $saveResult['post_id']; wp_update_post( array( 'ID' => $saveResult['post_id'], 'post_parent' => $postId ) ); } } if (is_string($variations['VariationDimensions']['VariationDimension'])) { $variations['VariationDimensions']['VariationDimension'] = array($variations['VariationDimensions']['VariationDimension']); } $meta = array(); $meta['Variations'] = $variations; /** * Addinig varits data in the main product */ $importer->updateProductPostMeta($meta, $postId); wp_update_post(array('ID' => $postId, 'post_status' => 'publish')); return $std; } /** * Update post parent */ add_action('KbAmazonImporter::saveProduct', 'kbAmzVariantsParent'); function kbAmzVariantsParent($std) { if (!getKbAmz()->getOption('allowVariants')) { return $std; } $postId = $std->postId; $parentAsin = $std->item->getParentAsin(); if (!$std->post->post_parent && $parentAsin) { $parentPost = getKbAmz()->getProductByAsin($parentAsin); if ($parentPost) { wp_update_post( array( 'ID' => $postId, 'post_parent' => $parentPost->ID ) ); } } } add_action('kb_amz_product_add_actions', 'kbAmzProductVariansActions'); function kbAmzProductVariansActions($std) { if (!getKbAmz()->getOption('allowVariants') || !$std->atts['variations']) { return $std; } $post = $std->post; $productId = $post->post_parent; $currentMeta = getKbAmz()->getProductMeta($post->ID); $html = array(); if (getKbAmz()->hasProductVariants($productId)) { $variants = getKbAmz()->getProductVariants($productId); if (empty($variants)) { return; } $productMeta = getKbAmz()->getProductMeta($productId); $types = $productMeta['KbAmzVariations']['VariationDimensions']['VariationDimension']; $types = array_merge(array(), $types); foreach ($types as $type) { $funct = 'kbAmzVariantType' . $type; if (!function_exists($funct)) { continue; } $typeVariants = array(); foreach ($variants as $variant) { $meta = getKbAmz()->getProductMeta($variant->ID); if (!isset($meta['KbAmzVariationAttributes']['VariationAttribute'])) { continue; } $canUserVariant = true; foreach ($meta['KbAmzVariationAttributes']['VariationAttribute'] as $pair) { if (!isset($pair['Name'])) { continue; } $key = 'KbAmzItemAttributes.' . $pair['Name']; if ($pair['Name'] != $type) { if (isset($currentMeta[$key]) && $currentMeta[$key] != $pair['Value']) { $canUserVariant = false; } } } if (!$canUserVariant) { continue; } $typeVariants[] = $variant; } if (count($typeVariants) > 1) { $html[] = $funct( $typeVariants, array( 'type' => $type, 'label' => isset($productMeta['KbAmzItemAttributes.' . $type]) ? $productMeta['KbAmzItemAttributes.' . $type] : null ), $post ); } } $std->actions[] = array( 'html' => implode(PHP_EOL, $html), 'order' => 90 ); } return $std; } function kbAmzVariantTypeColor($variants, $type, $active) { $html = <<
| '.__('Format').' | '.__('Price').' |
|---|