An attribute is a property of an entity that can be used in various Magento 2 store’s function.
Here we’ll talk about customer attribute. Create custom customer attribute in Magento 2 with the below solution.
Magento is a user-friendly platform and it allows creating custom attributes. Such customer custom attributes help in understanding the customer in a better way.
Some examples of custom customer attributes are customers’ mobile number, interests/hobbies, etc. which can be programmatically created using this method:
Method to Create Custom Customer Attribute in Magento 2:
<?php namespace Vendor\Extension\Setup; use Magento\Customer\Api\CustomerMetadataInterface; use Magento\Eav\Setup\EavSetup; use Magento\Eav\Model\Config as EavConfig; use Magento\Eav\Setup\EavSetupFactory; use Magento\Framework\Setup\InstallDataInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Catalog\Model\ResourceModel\Eav\Attribute; use Magento\Catalog\Model\Product; class InstallData implements InstallDataInterface { private $eavSetupFactory; /** * @var EavConfig */ private $eavConfig; public function __construct(EavSetupFactory $eavSetupFactory, EavConfig $eavConfig) { $this->eavSetupFactory = $eavSetupFactory; $this->eavConfig = $eavConfig; } public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) { $eavsetup = $this->eavSetupFactory->create(['setup' => $setup]); $attributecode = 'interests'; $eavsetup->addAttribute(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, $attributecode, [ 'label' => 'Interests', 'required' => 0, 'user_defined' => 1, 'note' => 'Separate Multiple Intrests with comms', 'system' => 0, 'position' => 100, ]); $eavsetup->addAttributeToSet( CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, CustomerMetadataInterface::ATTRIBUTE_SET_ID_CUSTOMER, null, $attributecode ); $attribute = $this->eavConfig->getAttribute(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, $attributecode); $attribute->setData('used_in_forms', [ 'adminhtml_customer', 'customer_account_create', 'customer_account_edit' ]); $attribute->setData('validate_rules', [ 'input_validation' => 1, 'min_text_length' => 3, 'max_text_length' => 30, ]); $attribute->getResource()->save($attribute); } }
Now, run the below commands:
php bin/magento setup:upgrade php bin/magento setup:static-content:deploy -f php bin/magento cache:flush php bin/magento cache:clean
That’s it.
Feel free to share the solution among fellow Magento developers via social media.
Thank you.