从 Woocommerce 单个产品页面中删除结构化数据

Remove structured data from Woocommerce single product pages

我正在尝试删除 Woocommerce 添加到产品页面的 structured data

我做了一些研究,发现 WC_Structured_Data::generate_product_data() 生成结构化数据标记。它挂在 woocommerce/templates/content-single-product.php 模板文件中的 woocommerce_single_product_summary 动作挂钩中。

我尝试将以下代码添加到 functions.php

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

所以 Woocommerce 不会添加结构化数据,但它不起作用

我做错了什么吗?还有其他方法可以实现我想要实现的目标吗?

相反,您可以使用位于 WC_Structured_Data for generate_product_data() method 中的专用过滤器挂钩 'woocommerce_structured_data_product',使单个产品页面中的结构化数据输出无效:

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 文件。已测试并有效。

我怀疑人们想要删除默认选项卡,他们在看到 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。

这是删除与实例化对象方法关联的挂钩的方法。您必须找到保存新 Object 实例的变量。

在这种情况下,主要的 WooCommerce 对象可以作为 $GLOBALS['woocommerce'] 访问并且它有 public 属性 $structured_data 包含 WC_Structured_Data 对象的实例.

因此,要删除问题中的钩子,您可以编写以下代码:

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

添加到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()。不会浪费资源先无缘无故地生成产品数据,然后稍后使用过滤器“清空”相同的生成数据。