0

I am trying to add custom options to products on save. I want to add or update custom options (not additional options) on before_product save. I am able to access the observer and it is working on save as well but unable to update the custom options. Create option code is working if run from standalone script but not from observer only. This is my observer code

class Company_Module_Model_Observer{
    public function updateOptions($observer){
        $product = $observer->getEvent()->getProduct();
        $categories= $product->getCategoryIds();
        $currentCategory = '';

        foreach ($categories as $cat_id){
            $cat = Mage::getModel('catalog/category')->load($cat_id);
            $currentCategory = $cat->getName();
        }

        $skuList =['LAPTOP_','DESKTOP_'];
        $upgrades = $optionValues =  [];
        if($currentCategory=='Laptops'){
            $_productCollection = Mage::getModel('catalog/product')
                ->getCollection()
                ->addAttributeToFilter('sku', array('like' => 'LAPTOP_%'));
            $upgrades = $_productCollection;
        }
        $meta = "6 this is product meta with custom plugin ".$product->getName();
        foreach ($upgrades as $products) {
            $_product = Mage::getModel('catalog/product')->load($products->getId());

            $optionValues = array(
                'title' => $_product->getName(),
                'price' => $_product->getPrice(),
                'price_type' => 'fixed',
                'sku' => $_product->getSku(),
                'sort_order' => 0,
            );
        }

        $options = array(
            'title' => 'Upgrades',
            'type' => 'drop_down',
            'is_required' => 0,
            'sort_order' => 0,
            'values' => $optionValues
        );
    
        $product->setMetaDescription($meta);
        $product->setProductOptions(array($options));
        $product->setCanSaveCustomOptions(true);
        //if uncomment this then save loop continues and site hangs
        //$product->save();
    }
}

No error in logs or anything else. Please guide me how I can achieve this.

1 Answer 1

0

Try this way

  $product->setCanSaveCustomOptions(true);
                if ($customOptions = $product->getProductOptions()) {
                    foreach (array_keys($customOptions) as $key) {
                        $customOptions[$key]['custom_value'] = "value";
                    }
                    $product->setProductOptions($customOptions);
                }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.