我正在尝试删除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不会添加结构化数据,但它不起作用 ......
我做错了吗?还有另一种方法可以做我想要实现的目标吗?
答案 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()。不会先无故浪费资源来生成产品数据,然后稍后再使用过滤器“清空”相同的生成数据。