private function createExampleProduct($offer_id) { $product = new Google_Service_ShoppingContent_Product(); $product->setOfferId($offer_id); $product->setTitle('A Tale of Two Cities'); $product->setDescription('A classic novel about the French Revolution'); $product->setLink('http://my-book-shop.com/tale-of-two-cities.html'); $product->setImageLink('http://my-book-shop.com/tale-of-two-cities.jpg'); $product->setContentLanguage('en'); $product->setTargetCountry('US'); $product->setChannel('online'); $product->setAvailability('in stock'); $product->setCondition('new'); $product->setGoogleProductCategory('Media > Books'); $product->setGtin('9780007350896'); $price = new Google_Service_ShoppingContent_Price(); $price->setValue('2.50'); $price->setCurrency('USD'); $product->setPrice($price); $shipping_price = new Google_Service_ShoppingContent_Price(); $shipping_price->setValue('0.99'); $shipping_price->setCurrency('USD'); $shipping = new Google_Service_ShoppingContent_ProductShipping(); $shipping->setPrice($shipping_price); $shipping->setCountry('US'); $shipping->setService('Standard shipping'); $product->setShipping(array($shipping)); $shipping_weight = new Google_Service_ShoppingContent_ProductShippingWeight(); $shipping_weight->setValue(200); $shipping_weight->setUnit('grams'); $product->setShippingWeight($shipping_weight); return $product; }
/** * Set current attribute to entry (for specified product) * * @param Mage_Catalog_Model_Product $product * @param Google_Service_ShoppingContent_Product $shoppingProduct * @return Google_Service_ShoppingContent_Product */ public function convertAttribute($product, $shoppingProduct) { $product->setWebsiteId(Mage::app()->getStore($product->getStoreId())->getWebsiteId()); $product->setCustomerGroupId(Mage::getStoreConfig(Mage_Customer_Model_Group::XML_PATH_DEFAULT_ID, $product->getStoreId())); $store = Mage::app()->getStore($product->getStoreId()); $targetCountry = Mage::getSingleton('googleshoppingapi/config')->getTargetCountry($product->getStoreId()); $isSalePriceAllowed = true; //($targetCountry == 'US'); // get tax settings $taxHelp = Mage::helper('tax'); $priceDisplayType = $taxHelp->getPriceDisplayType($product->getStoreId()); //$inclTax = ($priceDisplayType == Mage_Tax_Model_Config::DISPLAY_TYPE_INCLUDING_TAX); $inclTax = $priceDisplayType == Mage_Tax_Model_Config::DISPLAY_TYPE_INCLUDING_TAX || $priceDisplayType == Mage_Tax_Model_Config::DISPLAY_TYPE_BOTH; // calculate sale_price attribute value $salePriceAttribute = $this->getGroupAttributeSalePrice(); $salePriceMapValue = null; $finalPrice = null; if (!is_null($salePriceAttribute)) { $salePriceMapValue = $salePriceAttribute->getProductAttributeValue($product); } if (!is_null($salePriceMapValue) && floatval($salePriceMapValue) > 0.0001) { $finalPrice = $salePriceMapValue; } else { if ($isSalePriceAllowed) { $finalPrice = Mage::helper('googleshoppingapi/price')->getCatalogPrice($product, $store, $inclTax); } } if ($product->getTypeId() != Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) { $finalPrice = $taxHelp->getPrice($product, $finalPrice, $inclTax, null, null, null, $product->getStoreId()); } // calculate price attribute value $priceMapValue = $this->getProductAttributeValue($product); $price = null; if (!is_null($priceMapValue) && floatval($priceMapValue) > 0.0001) { $price = $priceMapValue; } else { if ($isSalePriceAllowed) { $price = Mage::helper('googleshoppingapi/price')->getCatalogRegularPrice($product, $store); } else { $inclTax = $priceDisplayType != Mage_Tax_Model_Config::DISPLAY_TYPE_EXCLUDING_TAX; $price = Mage::helper('googleshoppingapi/price')->getCatalogPrice($product, $store, $inclTax); } } if ($product->getTypeId() != Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) { $price = $taxHelp->getPrice($product, $price, $inclTax, null, null, null, $product->getStoreId()); } $shoppingPrice = new Google_Service_ShoppingContent_Price(); $shoppingPrice->setCurrency($store->getDefaultCurrencyCode()); //sprintf('%.2f', $store->roundPrice($price)) if ($isSalePriceAllowed) { // set sale_price and effective dates for it if ($price && $price - $finalPrice > 0.0001) { $salesPrice = new Google_Service_ShoppingContent_Price(); $salesPrice->setCurrency($store->getDefaultCurrencyCode()); $shoppingPrice->setValue(sprintf('%.2f', $store->roundPrice($price))); $salesPrice->setValue($finalPrice); $shoppingProduct->setSalePrice($salesPrice); $effectiveDate = $this->getGroupAttributeSalePriceEffectiveDate(); if (!is_null($effectiveDate)) { $effectiveDate->setGroupAttributeSalePriceEffectiveDateFrom($this->getGroupAttributeSalePriceEffectiveDateFrom())->setGroupAttributeSalePriceEffectiveDateTo($this->getGroupAttributeSalePriceEffectiveDateTo())->convertAttribute($product, $shoppingProduct); } } else { $shoppingPrice->setValue(sprintf('%.2f', $store->roundPrice($finalPrice))); } //TODO // 2011-03-01T13:00-0800/2011-03-11T15:30-0800 // salePriceEffectiveDate // calculate taxes $tax = $this->getGroupAttributeTax(); if (!$inclTax && !is_null($tax)) { $tax->convertAttribute($product, $shoppingProduct); } } else { $shoppingPrice->setValue(sprintf('%.2f', $store->roundPrice($price))); } $shoppingProduct->setPrice($shoppingPrice); return $shoppingProduct; }
/** * Build a Google Shopping Content Product from a WC Product * @param WC_Product $wc_product * @return Google_Service_ShoppingContent_Product */ function woogle_build_product($wc_product) { // Create Google Shopping Content Product require_once plugin_dir_path(woogle_get_plugin_file()) . 'vendor/google-api-php-client/src/Google/Service/ShoppingContent.php'; $product = new Google_Service_ShoppingContent_Product(); // Custom Attributes $product_custom_attributes = array(); // Product identifiers $sku = $wc_product->get_sku(); if (empty($sku)) { if ($wc_product->is_type('variation')) { $product->setOfferId($wc_product->variation_id); } else { $product->setOfferId($wc_product->id); } } else { $product->setOfferId($sku); } if ($wc_product->is_type('variation')) { $product->setItemGroupId($wc_product->parent->id); } $woocommerce_id_attribute = new Google_Service_ShoppingContent_ProductCustomAttribute(); $woocommerce_id_attribute->setName('woocommerce_id'); $woocommerce_id_attribute->setValue($wc_product->id); $woocommerce_id_attribute->setType('int'); $product_custom_attributes[] = $woocommerce_id_attribute; // Title $woogle_title = get_post_meta($wc_product->id, '_woogle_title', true); if (!empty($woogle_title)) { $product->setTitle(html_entity_decode(strip_tags($woogle_title))); } else { $product->setTitle(html_entity_decode(strip_tags($wc_product->get_title()))); } // Description $woogle_description = get_post_meta($wc_product->id, '_woogle_description', true); if (!empty($woogle_description)) { $product->setDescription(html_entity_decode(strip_tags($woogle_description))); } else { $product->setDescription(html_entity_decode(strip_tags($wc_product->post->post_content))); } $product->setLink($wc_product->get_permalink()); $image = $wc_product->get_image(); $post_thumbnail_id = get_post_thumbnail_id($wc_product->id); if ($post_thumbnail_id) { $image_src = wp_get_attachment_image_src($post_thumbnail_id); $product->setImageLink(@$image_src[0]); } $product->setContentLanguage(substr(get_locale(), 0, 2)); $product->setTargetCountry(WC()->countries->get_base_country()); $product->setChannel('online'); $product->setAvailability($wc_product->is_in_stock() ? 'in stock' : 'out of stock'); // Condition $condition = get_post_meta($wc_product->id, '_woogle_condition', true); if (!empty($condition)) { $product->setCondition($condition); } else { $product->setcondition('new'); } // Category $category = get_post_meta($wc_product->id, '_woogle_category', true); if (!empty($category)) { $product->setGoogleProductCategory($category); } // Brand $brand = get_post_meta($wc_product->id, '_woogle_brand', true); if (!empty($brand)) { $product->setBrand($brand); } // GTIN $gtin = get_post_meta($wc_product->id, '_woogle_gtin', true); if (!empty($gtin)) { $product->setGtin($gtin); } // MPN $mpn = get_post_meta($wc_product->id, '_woogle_mpn', true); if (!empty($mpn)) { $product->setMpn($mpn); } if (empty($gtin) && empty($mpn)) { $product->setIdentifierExists(false); } // Price $price = new Google_Service_ShoppingContent_Price(); $price->setValue($wc_product->get_regular_price()); $price->setCurrency(get_woocommerce_currency()); $product->setPrice($price); // Sale price $wc_sale_price = $wc_product->get_sale_price(); if (!empty($wc_sale_price)) { $sale_price = new Google_Service_ShoppingContent_Price(); $sale_price->setValue($wc_sale_price); $sale_price->setCurrency(get_woocommerce_currency()); $product->setSalePrice($sale_price); $post_id = $wc_product->is_type('variation') ? $wc_product->variation_id : $wc_product->id; $sale_price_dates_from = get_post_meta($post_id, '_sale_price_dates_from', true); $sale_price_dates_to = get_post_meta($post_id, '_sale_price_dates_to', true); if (!empty($sale_price_dates_from) && !empty($sale_price_dates_to)) { $effective_date_start = date('c', intval($sale_price_dates_from)); $effective_date_end = date('c', intval($sale_price_dates_to)); $product->setSalePriceEffectiveDate("{$effective_date_start}/{$effective_date_end}"); } } // Shipping fields // Shipping weight $wc_product_weight = $wc_product->get_weight(); if (!empty($wc_product_weight)) { $shipping_weight = new Google_Service_ShoppingContent_ProductShippingWeight(); $shipping_weight->setValue($wc_product_weight); $shipping_weight->setUnit(get_option('woocommerce_weight_unit', 'kg')); $product->setShippingWeight($shipping_weight); } // Shipping dimensions $wc_dimension_unit = get_option('woocommerce_dimension_unit', 'cm'); $wc_product_length = $wc_product->get_length(); if (!empty($wc_product_length)) { $dimension = new Google_Service_ShoppingContent_ProductShippingDimension(); $dimension->setValue($wc_product_length); $dimension->setUnit($wc_dimension_unit); $product->setShippingLength($dimension); } $wc_product_width = $wc_product->get_width(); if (!empty($wc_product_width)) { $dimension = new Google_Service_ShoppingContent_ProductShippingDimension(); $dimension->setValue($wc_product_width); $dimension->setUnit($wc_dimension_unit); $product->setShippingWidth($dimension); } $wc_product_height = $wc_product->get_height(); if (!empty($wc_product_height)) { $dimension = new Google_Service_ShoppingContent_ProductShippingDimension(); $dimension->setValue($wc_product_height); $dimension->setUnit($wc_dimension_unit); $product->setShippingHeight($dimension); } // Attributes $color = null; $material = null; $pattern = null; $size = null; $age_group = null; $gender = null; $adult = null; if ($wc_product->is_type('variation')) { // Variable product $wc_variation_attributes = $wc_product->get_variation_attributes(); foreach ($wc_variation_attributes as $name => $value) { if (!empty($value)) { $attribute = new Google_Service_ShoppingContent_ProductCustomAttribute(); $attribute->setName($name); $attribute->setValue($value); $attribute->setType('text'); $product_custom_attributes[] = $attribute; // Google attributes if (empty($color)) { $color = woogle_maybe_get_attribute('color', $name, $value); } if (empty($material)) { $material = woogle_maybe_get_attribute('material', $name, $value); } if (empty($pattern)) { $pattern = woogle_maybe_get_attribute('pattern', $name, $value); } if (empty($size)) { $size = woogle_maybe_get_attribute('size', $name, $value); } if (empty($age_group)) { $age_group = woogle_maybe_get_attribute('age-group', $name, $value); } if (empty($gender)) { $gender = woogle_maybe_get_attribute('gender', $name, $value); } if (empty($adult)) { $adult = woogle_maybe_get_attribute('adult', $name, $value); } } } } else { // Simple product $wc_attributes = $wc_product->get_attributes(); foreach ($wc_attributes as $name => $wc_attribute) { if ($wc_attribute['is_taxonomy']) { $term_values = array(); $terms = wp_get_post_terms($wc_product->id, $name); foreach ($terms as $term) { $term_values[] = $term->slug; } if (!empty($term_values)) { $value = implode(',', $term_values); $attribute = new Google_Service_ShoppingContent_ProductCustomAttribute(); $attribute->setName($name); $attribute->setValue($value); $attribute->setType('text'); $product_custom_attributes[] = $attribute; // Google attributes if (empty($color)) { $color = woogle_maybe_get_attribute('color', $name, $value); } if (empty($material)) { $material = woogle_maybe_get_attribute('material', $name, $value); } if (empty($pattern)) { $pattern = woogle_maybe_get_attribute('pattern', $name, $value); } if (empty($size)) { $size = woogle_maybe_get_attribute('size', $name, $value); } if (empty($age_group)) { $age_group = woogle_maybe_get_attribute('age-group', $name, $value); } if (empty($gender)) { $gender = woogle_maybe_get_attribute('gender', $name, $value); } if (empty($adult)) { $adult = woogle_maybe_get_attribute('adult', $name, $value); } } } } } /* * Physical properties */ // Color if (empty($color)) { $color = get_post_meta($wc_product->id, '_woogle_color', true); } if (!empty($color)) { $product->setColor($color); } // Material if (empty($material)) { $material = get_post_meta($wc_product->id, '_woogle_material', true); } if (!empty($material)) { $product->setMaterial($material); } // Pattern if (empty($pattern)) { $pattern = get_post_meta($wc_product->id, '_woogle_pattern', true); } if (!empty($pattern)) { $product->setPattern($pattern); } // Size if (empty($size)) { $size = get_post_meta($wc_product->id, '_woogle_size', true); } if (!empty($size)) { $product->setSizes(explode(', ', $size)); $product->setSizeSystem(WC()->countries->get_base_country()); } /* * Target consumer */ // Age Group if (empty($age_group)) { $age_group = get_post_meta($wc_product->id, '_woogle_age_group', true); } if (!empty($age_group)) { $product->setAgeGroup($age_group); } // Gender if (empty($gender)) { $gender = get_post_meta($wc_product->id, '_woogle_gender', true); } if (!empty($gender)) { $product->setGender($gender); } // Gender if (empty($adult)) { $adult = get_post_meta($wc_product->id, '_woogle_adult', true); } if (!empty($adult) && $adult != 'no') { $product->setAdult(true); } $product->setCustomAttributes($product_custom_attributes); return $product; }