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

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.
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

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.