In einem in unserer Webagentur programmierten Magento 2 Onlineshops standen wir vor der Herausforderung, in der Ergebnisliste der erweiterten Suche nur bestimmte Artikel anzuzeigen, bei uns Produkte mit einer bestimmten Attributausprägung, also: zeige nur Artikel in der Suchergebnisliste der erweiterten Suche, die das Attribut x mit dem Wert y besitzen.
Hierzu empfiehlt es sich, ein kleines Plugin zu schreiben, wir haben dies getan unter
/app/code/Econcess/AdvancedSearchRestriction
Die di.xml sieht hierbei so aus (name und type natürlich frei bzw. gem. Architektur wählbar:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\CatalogSearch\Model\Advanced">
<plugin name="Econcess-advancedsearchrestriction-catalogsearch-advanced" type="Econcess\AdvancedSearchRestriction\Plugin\ProductCollectionPrepareStrategyPlugin" sortOrder="1" />
</type>
</config>
Dann noch den deklarierten Typ deklarieren unter
/app/code/Econcess/AdvancedSearchRestriction/Plugin/ProductCollectionPrepareStrategyPlugin.php
Und fertig. In diesem Plugin holen wir uns nun die Suchergebnisliste (Collection) und können diese mit der Funktion
public function afterGetProductCollection(\Magento\CatalogSearch\Model\Advanced $subject, $result)
bearbeiten / nachfiltern. In unserem Falle ging es um das Attribut xy, das den Wert 33 haben sollte:
<?php
namespace Econcess\AdvancedSearchRestriction\Plugin;
class ProductCollectionPrepareStrategyPlugin
{
public function afterGetProductCollection(\Magento\CatalogSearch\Model\Advanced $subject, $result)
{
$result->addAttributeToFilter(
array(
array('attribute'=>'xy','eq'=>33)
));
return $result;
}
}
Das war's! Gesehen in unserer Agentur in einem Magento 2 Shop mit Version CE 2.3.