I've found a solution to hide the review rich snippets. In the file Vendor/Module/view/frontend/layout/catalog_product_view.xml, I've added the following code:
<!--
Replace the default review template file with a custom review template file
-->
<referenceContainer name="content">
<referenceBlock name="product.info.product_additional_data">
<action method="setTemplate" ifconfig="sytem_config/product/enable_product_structured_data">
<argument name="template" xsi:type="string">Vendor_Module::product/view/list.phtml</argument>
</action>
</referenceBlock>
</referenceContainer>
So based on the configuration 'enable_product_structured_data', which I've added in the system.xml, the list.phtml will be overwritten by the file Vendor/Module/view/frontend/template/product/view/list.phtml. That file is the same as Magento's own list.phtml (located in module-review), but without all the rich snippets attributes (itemscope, itemprop and itemtype).
To override the rating rich snippets, I had to create a rewrite. My di.xml contains the following code:
<preference for="Magento\Review\Block\Product\ReviewRenderer"
type="Vendor\Module\Rewrite\Magento\Review\Block\Product\ReviewRenderer"/>
My rewrite file (Vendor/Module/Rewrite/Magento/Review/Block/Product/ReviewRenderer.php) contains the following code:
<?php
namespace Vendor\Module\Rewrite\Magento\Review\Block\Product;
use Vendor\Module\Helper\Config;
/**
* Class ReviewRenderer
* @package Vendor\Module\Rewrite\Magento\Review\Block\Product
*/
class ReviewRenderer extends \Magento\Review\Block\Product\ReviewRenderer
{
/**
* @var \Vendor\Module\Helper\Config
*/
protected $configHelper;
/**
* ReviewRenderer constructor.
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Review\Model\ReviewFactory $reviewFactory
* @param \Vendor\Module\Helper\Config $configHelper
* @param array $data
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Review\Model\ReviewFactory $reviewFactory,
\Vendor\Module\Helper\Config $configHelper,
array $data = []
)
{
$this->configHelper = $configHelper;
parent::__construct($context, $reviewFactory, $data);
}
/**
* @param \Magento\Catalog\Model\Product $product
* @param string $templateType
* @param bool $displayIfNoReviews
* @return string
*/
public function getReviewsSummaryHtml(
\Magento\Catalog\Model\Product $product,
$templateType = \Magento\Review\Block\Product\ReviewRenderer::DEFAULT_VIEW,
$displayIfNoReviews = false
)
{
if (!$product->getRatingSummary() && !$displayIfNoReviews) {
return '';
}
// pick template among available
if (empty($this->_availableTemplates[$templateType])) {
$templateType = self::DEFAULT_VIEW;
}
if ($this->configHelper->get(Config::ENABLE_PRODUCT_STRUCTURED_DATA) &&
($templateType == self::FULL_VIEW || $templateType == self::DEFAULT_VIEW)) {
$this->setTemplate('Vendor_Module::helper/summary_custom.phtml');
} else {
$this->setTemplate($this->_availableTemplates[$templateType]);
}
$this->setDisplayIfEmpty($displayIfNoReviews);
if (!$product->getRatingSummary()) {
$this->_reviewFactory->create()->getEntitySummary($product, $this->_storeManager->getStore()->getId());
}
$this->setProduct($product);
return $this->toHtml();
}
}
Then I created the file Vendor/Module/view/frontend/templates/helper/summary_custom.phtml. This is also the same as Magento's own summary.pthml (also located in module-review), but again without the rich snippets attributes.
In this way, I was able to remove Magento's default rich snippets and add my own structured data.