在 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

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

基本上就是這樣。

如果您對此主題有任何疑問,請隨時在下面的部分中留下您的評論。