Magento 2 – How to Get All Product Attributes and Values (Yes/No)

magento2productproduct-attribute

As caption, I would like get the product attributes as attribute code like 'Label_x' for example 'Label_Hot', 'Label_Big_Sale'
can't create Attributes object with all attribute

I try the code as following:

public function label ($product)
{
$attributes = $product->getAttribute();
        foreach ($attributes as $attribute) { 
           if (stristr($attribute, 'label')==true)   
            {
            ...........logic..........
         }
     }
}

Best Answer

Change $product->getAttribute() to $product->getAttributes():

/**
 * Retrieve product attributes
 * if $groupId is null - retrieve all product attributes
 *
 * @param int  $groupId   Retrieve attributes of the specified group
 * @param bool $skipSuper Not used
 * @return \Magento\Eav\Model\Entity\Attribute\AbstractAttribute[]
 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
 */
public function getAttributes($groupId = null, $skipSuper = false)
{
    $productAttributes = $this->getTypeInstance()->getEditableAttributes($this);
    if ($groupId) {
        $attributes = [];
        foreach ($productAttributes as $attribute) {
            if ($attribute->isInGroup($this->getAttributeSetId(), $groupId)) {
                $attributes[] = $attribute;
            }
        }
    } else {
        $attributes = $productAttributes;
    }

    return $attributes;
}

Now you would be able to loop through the attributes and have access to the attribute object. You are able to use $attribute->getCode() to get the code.

Related Topic