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

时间:2018-03-15 18:33:32

标签: php wordpress woocommerce hook-woocommerce structured-data

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

我做了一些研究,发现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不会添加结构化数据,但它不起作用 ......

我做错了吗?还有另一种方法可以做我想要实现的目标吗?

4 个答案:

答案 0 :(得分:3)

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

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文件。经过测试和工作。

答案 1 :(得分:0)

我怀疑人们想删除默认选项卡,他们在看到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忘记提及此添加动作。

答案 2 :(得分:0)

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

在这种情况下,可以通过$GLOBALS['woocommerce']访问主要WooCommerce对象,并且它具有公共属性$structured_data,其中包含WC_Structured_Data对象的实例。

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

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

答案 3 :(得分:0)

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