Magento 2: Get all product types pro-grammatically in system admin?
-
07-03-2021 - |
Question
Magento 2 provides product types as simple, bundle, configurable, grouped, gift card, etc.
Is there any way programmatically to fetch all the product types which exist in the Magento codebase including custom product type also?
This should probably scan the product-type.xml
which is located in the respective module.
Solution
Refer below code can be useful in any class.
use Magento\Catalog\Api\ProductTypeListInterface;
use Magento\Catalog\Model\ProductTypes\ConfigInterface;
Below code for construct method.
public function __construct(
ConfigInterface $productTypeConfig,
\Magento\Catalog\Api\Data\ProductTypeInterfaceFactory $productTypeFactory
) {
$this->productTypeConfig = $productTypeConfig;
$this->productTypeFactory = $productTypeFactory;
}
Core function to get all product types
public function getProductTypes()
{
if ($this->productTypes === null) {
$productTypes = [];
foreach ($this->productTypeConfig->getAll() as $productTypeData) {
/** @var \Magento\Catalog\Api\Data\ProductTypeInterface $productType */
$productType = $this->productTypeFactory->create();
$productType->setName($productTypeData['name'])
->setLabel($productTypeData['label']);
$productTypes[] = $productType;
}
$this->productTypes = $productTypes;
}
return $this->productTypes;
}
Refer: /app/code/Magento/Catalog/Model/ProductTypeList.php
OTHER TIPS
Cleaner way: inject Magento\Catalog\Model\Product\Type
and call toOptionArray()
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange