Indexing
...
Entities
Products
Custom Product Types
3min
product types are injected via this virtualtype klevu\indexingproducts\service\provider\entityproviderprovider in the indexing products module etc/di xml magento2 plugin/module m2 indexing products/etc/di xml \<virtualtype name="klevu\indexingproducts\service\provider\entityproviderprovider" type="klevu\indexing\service\provider\entityproviderprovider"> \<arguments> \<argument name="entityproviders" xsi\ type="array"> \<item name="simple" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\simple\</item> \<item name="virtual" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\virtual\</item> \<item name="downloadable" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\downloadable\</item> \<item name="grouped" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\grouped\</item> \<item name="bundle" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\bundle\</item> \<item name="configurable" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\configurable\</item> \<item name="configurable variants" xsi\ type="object">klevu\indexingproducts\service\provider\productentityprovider\configurablevariants\</item> \</argument> \</arguments> \</virtualtype> merchants can add to this entityproviderprovider e g vendor/module/etc/di xml \<virtualtype name="klevu\indexingproducts\service\provider\entityproviderprovider"> \<arguments> \<argument name="entityproviders" xsi\ type="array"> \<item name="custom type" xsi\ type="object">vendor\module\service\provider\productentityprovider\customtypeprovider\</item> \</argument> \</arguments> \</virtualtype> there are 2 ways in which this customtypeprovider can be generated 1\ (recommended) use virtualtypes , as the klevu module does, and pass your custom producttype e g vendor/module/etc/di xml \<! virtual type for productentityprovider > \<virtualtype name="vendor\module\service\provider\productentityprovider\customtypeprovider" type="klevu\indexingproducts\service\provider\productentityprovider"> \<arguments> \<argument name="productentitycollection" xsi\ type="object">vendor\module\service\provider\discovery\productentitycollection\customtype\</argument> \</arguments> \</virtualtype> \<! virtual type for the productentitycollection used above > \<! this will return all product of type "custom type" > \<virtualtype name="vendor\module\service\provider\discovery\productentitycollection\customtype" type="klevu\indexingproducts\service\provider\discovery\productentitycollection"> \<arguments> \<argument name="producttype" xsi\ type="string">custom type\</argument> \</arguments> \</virtualtype> 2\ create a class this is recommended if you need to filter the returned products on more than the product type the provider must implement klevu\indexingapi\service\provider\entityproviderinterface e g vendor/module/etc/di xml \<virtualtype name="vendor\module\service\provider\productentityprovider\customtypeprovider" type="klevu\indexingproducts\service\provider\productentityprovider"> \<arguments> \<argument name="productentitycollection" xsi\ type="object">vendor\module\service\provider\discovery\productentitycollection\customtype\</argument> \</arguments> \</virtualtype> create the provider vendor/module/service/provider/discovery/productentitycollection/customtypeprovider php \<?php namespace vendor\module\service\provider\discovery\productentitycollection; use klevu\indexingapi\service\provider\entityproviderinterface; class customtype implements entityproviderinterface { / productcustomtypeentitycollection $productcustomtypeentitycollection / public function construct( productcustomtypeentitycollection $productcustomtypeentitycollection, ) { $this >productcustomtypeentitycollection = $productcustomtypeentitycollection; } / @param storeinterface|null $store @param int\[]|null $entityids @return productcollection / public function get( ?storeinterface $store = null, ?array $entityids = \[], ) ?\generator { $collection = $this >productcustomtypeentitycollection >get( store $store, entityids $entityids, ); foreach ($collection as $product) { yield $product; } } } here productcustomtypeentitycollection is a class that returns a collection of the custom product type