Удалить структурированные данные со страниц отдельных продуктов Woocommerce

Я пытаюсь удалить structured data что Woocommerce добавляет на страницы продукта.

Я провел некоторое исследование и обнаружил, что WC_Structured_Data::generate_product_data() генерирует разметку структурированных данных. Это зацепило в woocommerce_single_product_summary действие крюк в woocommerce/templates/content-single-product.php файл шаблона.

Я попытался, добавив следующий код в functions.php

remove_action( 'woocommerce_single_product_summary', 'WC_Structured_Data::generate_product_data()', 60 );

Таким образом, структурированные данные не будут добавлены Woocommerce, но это не работает

Я делаю что-то неправильно? Есть ли другой способ сделать то, что я пытаюсь достичь?

1 ответ

Решение

Вместо этого вы можете использовать специальный фильтр 'woocommerce_structured_data_product' который находится в WC_Structured_Data за generate_product_data() Метод обнуления вывода структурированных данных на отдельных страницах товара:

add_filter( 'woocommerce_structured_data_product', 'structured_data_product_nulled', 10, 2 );
function structured_data_product_nulled( $markup, $product ){
    if( is_product() ) {
        $markup = '';
    }
    return $markup;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Добавьте в functions.php:

add_action('wp_loaded', function() {
    remove_action('woocommerce_single_product_summary', [$GLOBALS['woocommerce']->structured_data, 'generate_product_data'], 60);   
});

Отключает WC_Structured_Data::generate_product_data(). Не будет тратить ресурсы на создание данных о продукте сначала без причины, а затем "обнулить" эти же сгенерированные данные через мгновение с помощью фильтра.

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

В этом случае основной объект WooCommerce доступен как $GLOBALS['woocommerce'] и это общественная собственность $structured_data который содержит экземпляр объекта WC_Structured_Data.

Следовательно, чтобы удалить крючок в вопросе, вы можете написать этот код:

remove_action( 'woocommerce_before_main_content', array( $GLOBALS['woocommerce']->structured_data, 'generate_website_data' ), 30 );

Я подозреваю, что люди хотят удалить вкладки по умолчанию, и они приходят сюда после того, как они видят Woocommerce content-single-product.php шаблон. В этом шаблоне вы видите, что generate_product_data() подключен с приоритетом 60.

После осмотра крючков, которые работают на woocommerce_single_product_summary,

Вы можете легко удалить вкладки с помощью:

remove_action( 'woocommerce_single_product_summary', 'woocommerce_output_product_data_tabs', 60 );

Я думаю, что Woocommerce забыл упомянуть эту add_action.

Другие вопросы по тегам