在 Magento 2 中隐藏默认的丰富片段功能

已发表: 2016-09-08

如果你来到这个页面,你一定知道什么是 Rich Snippets 以及它们在 Magento 2 中是如何工作的。

总的来说,结构化数据标记是电子商务平台第二版的一个很酷的功能。 Schema.org 被添加为默认模板,商家只需点击几下,即可为其网站搜索结果配备价格、评级、评论或其他标记值。

但是,在某些情况下,您可能想要禁用默认的丰富网页摘要功能。 其原因可能是:

  • 价格格式问题——目前,Magento 2 使用的格式不符合最新的 schema.Org 要求,可能会触发以下错误: 1
  • 与一些 3-d 方结构化数据标记扩展冲突
  • Google 产品的问题——这种类型的产品可能有不同的价格(例如 MSRP),这反过来又会触发与默认的 Magento 2 丰富网页摘要的冲突。

不幸的是,直到 v.2.1.1,无法通过Config settings禁用默认的丰富网页摘要功能。 因此,您需要一些解决方法。

在本文中,我将告诉您如何通过为 Magento 2 创建一个小但非常有用的扩展来禁用默认的结构化数据标记。

首先,让我们创建扩展的环境。

  1. 创建扩展

我们称它为“ Owner_Custom ”(尽管您可以选择任何您想要的名称)。

接下来,转到 app/code 并在那里创建一个“所有者”文件夹。 在这个文件夹中,创建一个名为“ Custom ”的新文件夹——它将是我们扩展的根文件夹。

从这里,我们创建以下文件:

文件:registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Owner_Custom',
    __DIR__
);

文件:etc/module.xml

 <?xml 版本="1.0"?>
<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Owner_Custom" setup_version="0.0.1"/>
</配置>

下一步,通过控制台安装扩展:

php bin/magento setup:upgrade — 保持生成

全部完成,现在我们的扩展可以在管理面板下的所有模块列表中找到:

php bin/magento 模块:状态

2.删除默认数据标记

当扩展的环境准备好后,我们可以开始创建一个布局文件,所有的魔法都在这里发生。

文件:视图/前端/布局/catalog_product_view.xml

<?xml 版本="1.0"?>
<page xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <正文>
        <attribute name="itemtype" remove="true" ifconfig="mageworx_seo/markup/product/rs_enabled"/>
        <attribute name="itemscope" remove="true" ifconfig="mageworx_seo/markup/product/rs_enabled"/>
    </正文>
</页面>

重要的

每次更改文件时不要忘记更新缓存。

在这部分代码中,我们将更改用于格式化结构化数据标记的参数。 在我们实现这个之后,标记将只包含我们的报价,例如:

2

如您所见,在此操作之后,Google 停止在“优惠”部分发出任何警告。

让我们添加更多代码行:

<?xml 版本="1.0"?>
<page xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <正文>
        <attribute name="itemtype" remove="true"/>
        <attribute name="itemscope" remove="true"/>
        <referenceBlock name="product.price.final">
            <参数>
                <argument name="zone" xsi:type="boolean">false</argument>
            </参数>
        </参考块>
    </正文>
</页面>

通过添加这些部分,我们删除了负责将此块标记为“报价”的参数。 因此,Google 工具在此处未检测到任何可用于 Rich Snippets 的数据:

3

还有最后一步要做。

为了禁用所有产品类型的默认丰富网页摘要,您需要再添加 2 个文件。 这是可下载产品的一个:

文件:查看/前端/布局/catalog_product_view_type_downloadable.xml

<?xml 版本="1.0"?>
<page xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <正文>
        <referenceContainer name="product.price.final.copy">
            <参数>
                <argument name="zone" xsi:type="boolean">false</argument>
            </参数>
        </referenceContainer>
    </正文>
</页面>

这适用于捆绑产品:

文件:视图/前端/布局/catalog_product_view_type_bundle.xml

<?xml 版本="1.0"?>
<page xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <正文>
        <referenceBlock name="product.price.render.bundle.customization">
            <参数>
                <argument name="zone" xsi:type="boolean">false</argument>
            </参数>
        </参考块>
    </正文>
</页面>

重要的

请注意,如果您的 Magento 商店中的某些产品已经过审核,则此评论将包含在默认标记中。 这可能会触发以下错误:

31e6d408642cc8cc288f6fde6f6fb0d8
由于它是硬编码在 Magento 主题文件中的,要删除它,你必须重写这个文件:

 供应商/magento/module-review/view/frontend/templates/helper/summary.phtml

将文件内容复制到:

 app/design/frontend/[package]/[theme]/templates/helper/summary.phtml

并删除标记:

 (itemprop=“aggregateRating” itemscope itemtype=“https://schema.org/AggregateRating”;itemprop=“bestRating”;itemprop=“ratingValue”;itemprop=“reviewCount”)

结果,你应该得到这个(对于 Magento 2.1x):

 <?php
/**
 * 版权所有 2016 Magento。 版权所有。
 * 有关许可证的详细信息,请参阅 COPYING.txt。
 */

// @codingStandardsIgnoreFile

?>
<?php $url = $block->getReviewsUrl() 。 '#reviews'; ?>
<?php $urlForm = $block->getReviewsUrl() 。 '#review-form'; ?>
<?php if ($block->getReviewsCount()): ?>
<?php $rating = $block->getRatingSummary(); ?>
<div class="product-reviews-summary<?php echo !$rating ? 'no-rating' : ''?>">
    <?php if ($rating):?>
    <div class="rating-summary">
         <span class="label"><span><?php /* @escapeNotVerified */ echo __('Rating') ?>:</span></span>
         <div class="rating-result" title="<?php /* @escapeNotVerified */ echo $rating; ?>%">
             <span><span><span><?php /* @escapeNotVerified */ echo $rating; ?></span>% of <span>100</span></span></span>
         </div>
     </div>
    <?php endif;?>
    <div class="reviews-actions">
        <a class="action view" href="<?php /* @escapeNotVerified */ echo $url ?>"><span><?php /* @escapeNotVerified */ echo $block->getReviewsCount() ?>< /span>&nbsp;<span><?php /* @escapeNotVerified */ echo($block->getReviewsCount() == 1) ? __('评论') : __('评论') ?></span></a>
        <a class="action add" href="<?php /* @escapeNotVerified */ echo $urlForm ?>"><?php /* @escapeNotVerified */ echo __('Add Your Review') ?></a >
    </div>
</div>
<?php elseif ($block->getDisplayIfEmpty()): ?>
<div class="product-reviews-summary empty">
    <div class="reviews-actions">
        <a class="action add" href="<?php /* @escapeNotVerified */ echo $urlForm; ?>">
            <?php /* @escapeNotVerified */ echo __('Be the first to review this product') ?>
        </a>
    </div>
</div>
<?php endif; ?>

最后,您可以通过以下方式启用/禁用我们的自定义扩展:

php bin/magento 模块:启用 Owner_Custom
php bin/magento 模块:禁用 Owner_Custom

啊,不要忘记刷新缓存以使所有更改生效。

基本上就是这样。

如果您对此主题有任何疑问,请随时在下面的部分中留下您的评论。