Удалить структурированные данные со страниц отдельных продуктов 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.