2

I have created my Attribute Set. Now all current & future products belongs to that Attribute Set Only.

So i want to set my "Attribute Set" as Default. Instead of Magento Default Attribute Set.

So when i'm going to Add New Product it will be Automatically Selected with my Attributes loaded. enter image description here

  • Also interested to see if there's an answer to this... – YorkieMagento Dec 29 '16 at 16:26
4

1.Find id of "Attribute Set" in database column eav_attribute_set.attribute_set_id

2.UPDATE `eav_entity_type` SET `default_attribute_set_id` = '%YOUR_Attribute_Set_ID%' WHERE `eav_entity_type`.`entity_type_code` = 'catalog_product'; 3. reindex and clear cache

  • 1
    Thank you Magentobro :) And don't be sad, you're the man ! – Yonn Trimoreau Mar 17 '17 at 10:11
  • @SadMagento Thanks bro! you made my day. – Faisal Sheikh Jun 21 at 9:26
0

Here is the php way to do it (and yes, I know you shouldn't use the objectmanager but I'm not going to explain that here). I'm making a one-off script that cleans up the mess from the migration thing. The code below removes the 'Migration_' attribute codes and assigns the lower values originally used, as well as deleting the new defaults. You can use this code as you see fit. The important part is calling the clear() function so magento doesn't use values from memory instead of reading your changes to the database.

<?php
echo "RUNNING";
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('memory_limit', '5G');
error_reporting(E_ALL);

use Magento\Framework\App\Bootstrap;
require 'app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);

$objectManager = $bootstrap->getObjectManager();

$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');

$scb = $objectManager->get('Magento\Framework\Api\SearchCriteriaBuilder');
$typeConfig = $objectManager->create('Magento\Eav\Model\Entity\Type');
$modelConfig = $objectManager->create('Magento\Eav\Model\Config');
$eavConfig = $objectManager->create('Magento\Eav\Api\AttributeSetRepositoryInterface');
$eavSetup = $objectManager->create('Magento\Eav\Setup\EavSetup');

$filter = $scb->addFilter('attribute_set_id',null,'neq')->create();
$list = $eavConfig->getList($filter)->getItems();

foreach ($list as $item) {
    $attributeSetName = $item->getAttributeSetName();
    $newItemName = explode('Migration_', $attributeSetName);
    if (is_array($newItemName) && count($newItemName) > 1) {
        $newItemName = $newItemName[1];
        if (strpos($item->getAttributeSetName(), 'Migration') !== false) {
            // See if attribute set name exists already
            // If yes
            // See if the attribute set ID is higher or lower
            // If lower, delete this one
            // If higher, delete found one and save this one.
            // If No
            // Save attribute set without "Migration_"
            foreach ($list as $innerItem) {
                if ($item != $innerItem) {
                    $innerAttributeSetName = $innerItem->getAttributeSetName();
                    if ($newItemName == $innerAttributeSetName && $innerItem->getEntityTypeId() == $item->getEntityTypeId()) {
                        if ($innerItem->getAttributeSetId() > $item->getAttributeSetId()) {
                            $type = $typeConfig->load($item->getEntityTypeId())
                                ->setData('default_attribute_set_id', $item->getAttributeSetId())
                                ->save();

                            $modelConfig->clear();
                            $resource = $innerItem->getResource();
                            $resource->delete($innerItem);
                        }
                    }

                }
            }

            $item->setName($newItemName);
            $item->save();
        }
    }
}



?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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