WooCommerce:将品牌和 gtin 添加到 Yoast 中的产品架构标记
WooCommerce: Add brand and gtin to product schema markup in Yoast
我想在 WooCommerce 中为我的产品标记添加品牌和 GTIN。
目前 Yoast SEO 插件已经添加了很多标记。
但它只能选择添加具有产品属性的品牌。在我的例子中,品牌基于自定义字段。另外 gtin 在不同的领域,不能与 Yoast 一起使用。
我在他们的 docs 中找到了一个代码片段,它允许将自定义数据添加到标记中:
add_filter('wpseo_schema_webpage','example_change_webpage');
/**
* Changes @type of Webpage Schema data.
*
* @param array $data Schema.org Webpage data array.
*
* @return array Schema.org Webpage data array.
*/
function example_change_webpage( $data ) {
if ( ! is_page( 'about' ) ) {
return $data;
}
$data['@type'] = 'AboutPage';
return $data;
}
但这不适用于产品,我不知道如何更改它。
我还找到了 schmea piece 产品的示例:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "https://www.example.com/#/schema/product/abc123",
"name": "Example Product",
"image": {
"@id": "https://www.example.com/#/schema/image/abc123"
}
}
]
}
我可以在自定义函数中使用它,并将其作为 javascript 添加到头部。像这样:
add_action( 'wp_head', function() {
if ( is_product() ):
?>
<script type="application/ld+json">{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "#product",
"brand": {
"@id": "https://www.example.com/#/schema/organization/abc123"
},
"sku": "abc123",
}
]
}</script>
<?php
endif;
}, 99 );
但现在我有两种不同的产品架构标记。
没有办法从 Yoast 向现有标记添加内容吗?
我想我找到了解决办法:
add_filter( 'wpseo_schema_product', 'custom_set_extra_schema' );
function custom_set_extra_schema( $data ) {
global $product;
$gtin = get_post_meta( $product->get_id(), '_custom_gtin', true );
$brand_name = get_post_meta( $product->get_id(), '_custom_brand_name', true );
$data['brand'] = $brand_name;
$data['gtin13'] = $gtin;
return $data;
}
除非您使用 Yoast SEO woocommerce 插件,否则上面批准的答案将不起作用。您可以使用下面的代码添加品牌和 gtin。
add_filter( 'woocommerce_structured_data_product', 'custom_set_extra_schema', 20, 2 );
function custom_set_extra_schema( $schema, $product ) {
$gtin = get_post_meta( $product->get_id(), '_custom_gtin', true );
$brand_name = get_post_meta( $product->get_id(), '_custom_brand_name', true );
$schema['brand'] = $brand_name;
$schema['gtin13'] = $gtin;
return $schema;
}
我想在 WooCommerce 中为我的产品标记添加品牌和 GTIN。 目前 Yoast SEO 插件已经添加了很多标记。 但它只能选择添加具有产品属性的品牌。在我的例子中,品牌基于自定义字段。另外 gtin 在不同的领域,不能与 Yoast 一起使用。
我在他们的 docs 中找到了一个代码片段,它允许将自定义数据添加到标记中:
add_filter('wpseo_schema_webpage','example_change_webpage');
/**
* Changes @type of Webpage Schema data.
*
* @param array $data Schema.org Webpage data array.
*
* @return array Schema.org Webpage data array.
*/
function example_change_webpage( $data ) {
if ( ! is_page( 'about' ) ) {
return $data;
}
$data['@type'] = 'AboutPage';
return $data;
}
但这不适用于产品,我不知道如何更改它。
我还找到了 schmea piece 产品的示例:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "https://www.example.com/#/schema/product/abc123",
"name": "Example Product",
"image": {
"@id": "https://www.example.com/#/schema/image/abc123"
}
}
]
}
我可以在自定义函数中使用它,并将其作为 javascript 添加到头部。像这样:
add_action( 'wp_head', function() {
if ( is_product() ):
?>
<script type="application/ld+json">{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "#product",
"brand": {
"@id": "https://www.example.com/#/schema/organization/abc123"
},
"sku": "abc123",
}
]
}</script>
<?php
endif;
}, 99 );
但现在我有两种不同的产品架构标记。
没有办法从 Yoast 向现有标记添加内容吗?
我想我找到了解决办法:
add_filter( 'wpseo_schema_product', 'custom_set_extra_schema' );
function custom_set_extra_schema( $data ) {
global $product;
$gtin = get_post_meta( $product->get_id(), '_custom_gtin', true );
$brand_name = get_post_meta( $product->get_id(), '_custom_brand_name', true );
$data['brand'] = $brand_name;
$data['gtin13'] = $gtin;
return $data;
}
除非您使用 Yoast SEO woocommerce 插件,否则上面批准的答案将不起作用。您可以使用下面的代码添加品牌和 gtin。
add_filter( 'woocommerce_structured_data_product', 'custom_set_extra_schema', 20, 2 );
function custom_set_extra_schema( $schema, $product ) {
$gtin = get_post_meta( $product->get_id(), '_custom_gtin', true );
$brand_name = get_post_meta( $product->get_id(), '_custom_brand_name', true );
$schema['brand'] = $brand_name;
$schema['gtin13'] = $gtin;
return $schema;
}