Это может на самом деле не ответить на вопрос, но есть вероятность, что, если вы пропустите перезапись URL, вы можете получить свой продукт из коллекции продуктов. И добавление информации о перезаписи URL не является автоматическим, как вы можете видеть в \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.
Мне удалось принудительно добавить перезапись URL-адресов путем создания плагина для create()
метода \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. И как только ваш код (или основной код Magento) использует эту фабрику для создания экземпляра коллекции продуктов (и это следует из лучших практик), этот плагин заставляет \Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
to true
.
Затем URL-адреса продуктов успешно добавляются в продукты без необходимости их зацикливания и перезагрузки. Таким образом, это исправляет недостатки, о которых говорил @Raphael.
Вот определение XML плагина (в вашем di.xml
файле):
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory">
<plugin name="your_plugin_unique_nane" type="Your\Plugin\Namespace\Plugin" />
</type>
</config>
И код плагина:
namespace Your\Plugin\Namespace;
use Magento\Catalog\Model\ResourceModel\Product\Collection;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as CoreCollectionFactory;
class Plugin
{
/**
* @param CoreCollectionFactory $subject
* @param Collection $collection
* @return Collection
*/
public function afterCreate(CoreCollectionFactory $subject, Collection $collection)
{
$collection->addUrlRewrite();
return $collection;
}
}