Скрытие расширенных сниппетов по умолчанию в Magento 2

Опубликовано: 2016-09-08

Если вы пришли на эту страницу, вы должны знать, что такое расширенные сниппеты и как они работают в Magento 2.

В целом, разметка структурированных данных — довольно крутая фича второй версии платформы электронной коммерции. Schema.org был добавлен в качестве шаблона по умолчанию, что позволяет продавцам оборудовать результаты поиска по сайту ценой, рейтингом, отзывами или другими значениями разметки всего за несколько кликов.

Однако в некоторых случаях вам может потребоваться отключить функцию расширенных фрагментов по умолчанию. Причинами тому могут быть:

  • проблемы с форматом цен — в настоящее время формат, используемый Magento 2, не соответствует последним требованиям schema.Org, что может вызвать следующую ошибку: 1
  • конфликтует с некоторыми сторонними расширениями разметки структурированных данных,
  • проблемы с продуктами Google — этот тип продуктов может поставляться с другой ценой (например, MSRP), что, в свою очередь, вызывает конфликты с расширенными фрагментами Magento 2 по умолчанию.

К сожалению, вплоть до версии 2.1.1 невозможно отключить расширенные сниппеты по умолчанию через настройки конфигурации . Следовательно, вам нужно какое-то обходное решение.

В этой статье я расскажу вам, как отключить разметку структурированных данных по умолчанию, создав небольшое, но очень полезное расширение для Magento 2.

Во-первых, давайте создадим среду расширения.

  1. Создание расширения

Назовем его Owner_Custom (хотя вы можете выбрать любое имя).

Затем перейдите в app/code и создайте там папку « Владелец ». Внутри этой папки создайте новую под названием « Custom » — это будет корневая папка для нашего расширения.

Отсюда мы создаем следующие файлы:

ФАЙЛ: Registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Владелец_Пользовательский',
    __КАТАЛОГ__
);

ФАЙЛ: 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"/>
</config>

На следующем шаге устанавливаем расширение через Консоль:

php bin/magento setup:upgrade — постоянно генерируется

Все готово, теперь наше расширение можно найти в списке всех модулей в панели администратора:

Модуль php bin/magento: статус

2. Удаление разметки данных по умолчанию

Когда среда расширения готова, мы можем приступить к созданию файла макета, где и происходит вся магия.

ФАЙЛ: view/frontend/layout/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>
            </аргументы>
        </referenceBlock>
    </тело>
</страница>

Добавив эти части, мы убрали параметр, отвечающий за разметку этого блока как «Предложение». В результате инструменты Google не обнаруживают здесь никаких данных, которые можно было бы использовать для расширенных сниппетов:

3

И осталось сделать последний штрих.

Чтобы отключить расширенные описания по умолчанию для всех типов продуктов, вам нужно добавить еще 2 файла. Это для загружаемых продуктов:

ФАЙЛ: view/frontend/layout/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>
    </тело>
</страница>

И это для комплектных продуктов:

ФАЙЛ: view/frontend/layout/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>
            </аргументы>
        </referenceBlock>
    </тело>
</страница>

ВАЖНЫЙ

Обратите внимание: если некоторые товары в вашем магазине Magento уже были проверены, этот обзор будет включен в разметку по умолчанию. Это может вызвать следующую ошибку:

31e6d408642cc8cc288f6fde6f6fb0d8
Поскольку он жестко запрограммирован в файлах темы Magento, чтобы удалить его, вам нужно переписать этот файл:

 поставщик/magento/module-review/view/frontend/templates/helper/summary.phtml

Скопируйте содержимое файла в:

 приложение/дизайн/интерфейс/[пакет]/[тема]/templates/helper/summary.phtml

и удалите разметку:

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

В результате вы должны получить это (для Magento 2.1x):

 <?php
/**
 * Copyright 2016 Magento. Все права защищены.
 * Подробнее о лицензии см. COPYING.txt.
 */

// @codingStandardsIgnoreFile

?>
<?php $url = $block->getReviewsUrl() . '#отзывы'; ?>
<?php $urlForm = $block->getReviewsUrl() . '#обзор-форма'; ?>
<?php if ($block->getReviewsCount()): ?>
<?php $rating = $block->getRatingSummary(); ?>
<div class="product-reviews-summary<?php echo !$rating ? ' no-rating' : ''?>">
    <?php если ($рейтинг):?>
    <div class="рейтинг-резюме">
         <span class="label"><span><?php /* @escapeNotVerified */ echo __('Рейтинг') ?>:</span></span>
         <div class="rating-result" title="<?php /* @escapeNotVerified */ echo $rating; ?>%">
             <span><span><span><?php /* @escapeNotVerified */ echo $rating; ?></span>% от <span>100</span></span></span>
         </div>
     </div>
    <?php конец;?>
    <div class="отзывы-действия">
        <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 __('Добавить свой отзыв') ?></a >
    </div>
</div>
<?php elseif ($block->getDisplayIfEmpty()): ?>
<div class="product-reviews-summary пустой">
    <div class="отзывы-действия">
        <a class="action add" href="<?php /* @escapeNotVerified */ echo $urlForm; ?>">
            <?php /* @escapeNotVerified */ echo __('Будьте первым, кто оставит отзыв об этом товаре') ?>
        </a>
    </div>
</div>
<?php конец; ?>

И, наконец, вот как вы можете включить/отключить наше пользовательское расширение:

Модуль php bin/magento: включить Owner_Custom
Модуль php bin/magento: отключить Owner_Custom

А, и не забудьте обновить кеш, чтобы все изменения вступили в силу.

Это в основном все.

Если у вас есть какие-либо вопросы по этой теме, не стесняйтесь оставлять свои комментарии в разделе ниже.