Reading list Switch to dark mode

    Update Product Custom Attribute Scope in Magento 2

    Here we learn in Magento2 – How to update product custom attribute’s scope in the custom module.
    If you want to create a new custom attribute in Magento 2, you can check the wonderful blog from here

    Update Product Custom Attribute Scope in Magento 2

    If there is an attribute with store view scope.

    1st Method: Using UpgradeData file

    First we need to create a file named as UpgradeData.php in our custom module Setup folder.
    complete path: app/code/ModuleNameSpace/YourModuleName/Setup/UpgradeData.php

    <?php
    
    namespace ModuleNameSpace\YourModuleName\Setup;
    
    use Magento\Framework\Setup;
    use Magento\Eav\Setup\EavSetupFactory;
    
    class UpgradeData implements Setup\UpgradeDataInterface 
    {
        /**
         * EAV setup factory
         *
         * @var EavSetupFactory
         */
        private $_eavSetupFactory;
        /**
         * @param EavSetupFactory  $eavSetupFactory
         */
        public function __construct(
            EavSetupFactory $eavSetupFactory
        ) {
            $this->_eavSetupFactory = $eavSetupFactory;
        }
    
        public function upgrade(
            Setup\ModuleDataSetupInterface $setup,
            Setup\ModuleContextInterface $moduleContext
        ) {
            $setup->startSetup();
            $eavSetup = $this->_eavSetupFactory->create(['setup' => $setup]);
            $eavSetup->updateAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'your_attribute_code',
                'is_global', \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
            );
            $setup->endSetup();
        }
    }

    Now, you have to update the version of the module from the module.xml file.

    Searching for an experienced
    Magento 2 Company ?
    Read More

    2nd Method: Using Data Patch

    In this method, we need to create a data patch file as UpdateAttributes.php in our custom module Setup folder. Note: You can also use the different file name and class name.
    complete path: app/code/ModuleNameSpace/YourModuleName/Setup/Patch/Data/UpdateAttributes.php

    To know more about data and schema patches, click here.

    <?php
    
    namespace ModuleNameSpace\YourModuleName\Setup\Patch\Data;
    
    use Magento\Eav\Setup\EavSetupFactory;
    use Magento\Framework\Setup\ModuleDataSetupInterface;
    use Magento\Framework\Setup\Patch\DataPatchInterface;
    
    class UpdateAttributes implements DataPatchInterface
    {
        /**
         * @var ModuleDataSetupInterface
         */
        private $moduleDataSetup;
        /**
         * @var EavSetupFactory
         */
        private $eavSetupFactory;
    
        /**
         * @param ModuleDataSetupInterface $moduleDataSetup
         * @param EavSetupFactory $eavSetupFactory
         */
        public function __construct(
            ModuleDataSetupInterface $moduleDataSetup,
            EavSetupFactory $eavSetupFactory
        ) {
            $this->moduleDataSetup = $moduleDataSetup;
            $this->eavSetupFactory = $eavSetupFactory;
        }
    
        /**
         * Add eav attributes
         */
        public function apply()
        {
            /** @var EavSetup $eavSetup */
            $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);
    
            $eavSetup->updateAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'your_attribute_code',
                'is_global',
    \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
            );
        }
    
        /**
         * Get dependencies
         */
        public static function getDependencies()
        {
            return [];
        }
    
        /**
         * Get Aliases
         */
        public function getAliases()
        {
            return [];
        }
    }

    After adding these files, update your custom product attribute’s scope in your custom module in your Magento 2 instance by running the following command in your magento2 root directory through terminal.

    php bin/magento setup:upgrade
    Update Product Custom Attribute Scope in Magento 2

    now, the scope of the attribute changes to the Global

    is_global’ flag is used instead of ‘global’ in updating the scope of an attribute.

    Hope it will help you. Thank you.

    . . .
    Add a comment

    Leave a Comment

    Your email address will not be published. Required fields are marked*


    2 comments

  • Shaun Lewandowski
    this helped a lot! thanks!
    • Rajat Singh (Moderator)
      You are most welcome.
  • Back to Top
    It works now, very happy, Webkul is always willing to help wherever they need to, their customer service is out of this world.
    Alain Stout
    CEO
    www.Takoda.Shop
    Talk to Sales

    Global

    Live Chat

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home