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