We will use the event catalog_product_save_before to create product custom option programmatically in magento2.
1 2 3 4 5 6 7 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_save_before"> <observer name="magemonkeys_customoption_add_custom_option" instance="Magemonkeys\Customoption\Observer\CatalogProductSaveBeforeObserver"/> </event> </config> |
In our CatalogProductSaveBeforeObserver class we get the product object. We have to check if the custom option with name “Custom Option” and type field already exists.
If not existed, we have to create an array with the options to be created.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<?php namespace Magemonkeys\Customoption\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Catalog\Api\Data\ProductCustomOptionInterface; use Magento\Catalog\Model\Product\OptionFactory; class CatalogProductSaveBeforeObserver implements ObserverInterface { /** * @var OptionFactory */ protected $productOptionFactory; /** * Catalog Product After Save constructor. * @param OptionFactory $productOptionFactory */ public function __construct( OptionFactory $productOptionFactory ) { $this->productOptionFactory = $productOptionFactory; } /** * Catalog Product Before Save * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { $product = $observer->getEvent()->getProduct(); $exist = false; //check if the custom option exists foreach ($product->getOptions() as $option) { if ($option->getGroupByType() == ProductCustomOptionInterface::OPTION_TYPE_FIELD && $option->getTitle() == 'Custom Option') { $exist = true; } } if (!$exist) { try { $optionArray = [ 'title' => 'Custom Option', 'type' => 'field', 'is_require' => false, 'sort_order' => 1, 'price' => 0, 'price_type' => 'fixed', 'sku' => '', 'max_characters' => 0 ]; $option = $this->productOptionFactory->create(); $option->setProductId($product->getId()) ->setStoreId($product->getStoreId()) ->addData($optionArray); $product->addOption($option); } catch (\Exception $e) { //throw new CouldNotSaveException(__('Something went wrong while saving option.')); } } } } |
If you want get query string params in controller file,...
Create di.xml and add the below code Magemonkey/Redirect/etc/frontend/di.xml [crayon-628469b7e8d31103379977/] Create...
You can try below code to change local date to...
Step 1: First you need to add registration.php file in...
Step1 : Override message.js in current theme file on the...