WooCommerce 是目前最好用的商城系统之一,而且是免费的,但是它默认的产品结构中并没有产品品牌及商品识别码 GTIN,UPC,EAN,MPN…
你可能提交Sitemap给Google Search console后,会得到如下一些警告:
- 未填写字段“brand”
- 未填写字段“aggregateRating”
- 未填写字段“review”
- 未提供全局标识符(例如 gtin、mpn、isbn)
先了解一下这些是什么。
构成GTIN的数据结构包括:
- GTIN-12(UPC-A):主要用于北美,12位数字
- GTIN-8(EAN / UCC-8):主要在北美以外使用,8位数字
- GTIN-13(EAN / UCC-13):主要在北美以外使用,13位数字
- GTIN-14(EAN / UCC-14或ITF-14):14位数字,用于标识不同包装级别的贸易商品。
何时使用
对于具有制造商分配的 GTIN 的所有产品,这是必需的。 仅当您确定 GTIN 正确时才提供。 如有疑问,请勿提供 GTIN(例如,不要猜测或虚构一个值)。
几种不同类型的 ID 号被视为 GTIN [gtin]。 使用此属性可以提交以下任何类型的数字:
- UPC(北美/GTIN-12):12 位数字(将 8 位 UPC-E 代码转换为 12 位代码)
- EAN(欧洲/GTIN-13):13 位数字
- JAN(日本/GTIN-13):8 或 13 位数字
- ISBN(书籍):13 位数字(将 ISBN-10 转换为 ISBN-13)。 如果两者都有,则仅包含 13 位数字。
- ITF-14(适用于多件包装/GTIN-14):14 位数字
在商业中使用商品识别码的好处
- 商品识别码消除了手动输入商品信息的必要,从而提高了速度,效率和生产率。例如,UPC的问世使计算机计费和更快的结帐成为可能。
- 它们有助于更准确地追踪库存。
- 它们是通用的:每个零售商和每个电商平台都将为某个商品使用相同的代码。
其实,我们只需要把以上元数据列出来,告诉搜索引擎就可以了。
那么要如何设置这些元数据,告诉搜索引擎呢?无外乎是两种,一是使用插件,二是使用代码。对于喜欢用插件的人来说就很简单了,比如插件WooCommerce – Yoast SEO。对于不喜欢用插件的,比如我,就喜欢使用代码来解决,避免一堆的插件,导致网站运行速度变慢。
方法很简单,这与我前面写的一篇很相似将品牌添加到 WooCommerce 产品架构中 – 无插件。它们可以合作无间。
我们需要做三件事:
- 在后端添加一些文本输入框,这样我们就可以编辑GTIN,GTIN13,MPN,EAN13等。在产品层面。
- 编写一些后端代码,在保存产品时捕获这些字段,然后将这些值存储在产品的post_meta中.
- 当WooCommerce输出产品模式并将我们的字段注入到结构化数据中时,挂钩它。
修改代码
首先,进入你的WordPress子主题,创建一个名为“my-product-identifiers.php”并将以下内容粘贴到其中。
<?php
/**
* 添加产品标识符 GTIN, GTIN13, MPN
*/
defined('WPINC') || die();
const MY_META_PRODUCT_GTIN = 'product_gtin';
const MY_META_PRODUCT_GTIN13 = 'product_gtin13';
const MY_META_PRODUCT_MPN = 'product_mpn';
function my_get_product_id_types() {
global $my_product_id_types;
if (is_null($my_product_id_types)) {
$my_product_id_types = array(
MY_META_PRODUCT_GTIN => array(
'label' => 'GTIN',
'description' => 'Global Trade Item Number',
'schema_key' => 'gtin',
),
MY_META_PRODUCT_GTIN13 => array(
'label' => 'GTIN 13',
'description' => 'Global Trade Item Number (13)',
'schema_key' => 'gtin13',
),
MY_META_PRODUCT_MPN => array(
'label' => 'MPN',
'description' => 'Manufacturer Part Number',
'schema_key' => 'mpn',
),
// Add your own idintifiers in here...
// ...
);
}
return $my_product_id_types;
}
/**
* When editing a WooCommerce product, render HTML inputs fields for our
* product identifiers.
*/
function my_render_simple_product_unique_ids() {
// Render the <input type="text" /> controls on the product page.
}
add_action('woocommerce_product_options_general_product_data', 'my_render_simple_product_unique_ids');
/**
* Hook into WooCommerce save product action, look for GTIN/etc in the $_POST
* data and save it in the product's post meta.
*/
function my_save_simple_product_unique_ids($product_id) {
// Analyse the $_POST data and save GTIN, MPN, etc in the product's post meta.
}
add_action('woocommerce_process_product_meta', 'my_save_simple_product_unique_ids', 10, 1);
/**
* Add GTIN/etc to the product's schema (structured data).
*/
function my_add_unique_ids_to_product_schema($data) {
// Adjust the product schema.
return $data;
}
add_filter('woocommerce_structured_data_product', 'my_add_unique_ids_to_product_schema');
我们创建了一个函数名为my_get_product_id_types()
,它返回一个包含我们所有信息的数组。这样我们就可以根据需要添加新的全球产品标识符。
接下来,打开子主题的functions.php并添加以下几行代码:
// WP教程产品标识符GTIN13 MPN等
require_once dirname(__FILE__) . '/my-product-identifiers.php';
编辑和保存产品设置
让我们先解决产品编辑的问题。这就是我们在编辑简单产品时的目标:

为了呈现输入框,我们需要从 my_get_product_id_types()
,遍历字段并调用 woocommerce_wp_text_input()
来渲染每一个。将以下内容粘贴到 my_render_simple_product_unique_ids()
:
function my_render_simple_product_unique_ids() {
$unique_id_types = my_get_product_id_types();
if (empty($product = wc_get_product())) {
// ...
} elseif ($product->is_type('variable')) {
// Variable products work differently.
} else {
echo '<div class="options_group">';
foreach ($unique_id_types as $field_name => $meta) {
woocommerce_wp_text_input(
array(
'id' => $field_name,
'label' => $meta['label'],
'description' => $meta['description'],
'desc_tip' => true,
'default' => '',
)
);
}
echo '</div>'; // .options_group
}
}
在此验证我们可以获得当前WooCommerce产品的句柄,并且它不是可变产品。然后,我们只需遍历我们的自定义字段。
接下来,将以下内容粘贴到 my_save_simple_product_unique_ids()
要在保存产品时捕获并保存产品的元数据,请执行以下操作:
function my_save_simple_product_unique_ids($product_id) {
$unique_id_types = my_get_product_id_types();
foreach ($unique_id_types as $field_name => $meta) {
$field_value = array_key_exists($field_name, $_POST) ? sanitize_text_field($_POST[$field_name]) : '';
if (!empty($field_value)) {
update_post_meta($product_id, $field_name, $field_value);
} else {
delete_post_meta($product_id, $field_name);
}
}
}
将您的所有更改保存到“my-product-identifiers.php ”,并编辑一个产品以检查字段是否显示。
挂钩产品模式
根据产品模式规范,我们需要向结构化数据添加新字段,如下所示:
{
"@context": "https://schema.org/",
"@type": "Product",
...
...
...
"gtin": "AAAABBBBCCCC",
"gtin13": "aaaabbbbcccc",
"mpn": "000011112222"
}
所以我们需要做的就是再次循环遍历 my_get_product_id_types()
,并且使用 get_post_meta( $product_id, $field_name, true )
获取GTIN/MPN并将其添加到模式数组中。
将以下内容粘贴到函数 my_add_unique_ids_to_product_schema()
:
function my_add_unique_ids_to_product_schema($data) {
if (!is_array($data)) {
// If $data isn't an array, don't do anything.
} elseif (empty($product = wc_get_product())) {
// Don't do anything.
} elseif ($product->is_type('variable')) {
// Variable products work differently.
} else {
$product_id = $product->get_id();
$unique_id_types = my_get_product_id_types();
foreach ($unique_id_types as $field_name => $meta) {
$field_value = strval(get_post_meta($product_id, $field_name, true));
$schema_key = $meta['schema_key'];
if (!empty($field_value)) {
$data[$schema_key] = $field_value;
}
}
}
return $data;
}
部署和测试
大概就是这样,现在我们只需要测试它。
小费如果你在你的网站上使用页面缓存插件,在测试改变之前刷新你的页面缓存。
去模式结构化数据测试工具并根据产品的URL进行测试。当您展开产品部分时,您应该会看到类似这样的内容(当然,有更合理的数据):

当你对你的产品模式感到满意时,提示谷歌搜索控制台重新索引你的页面,你的警告会在几天内得到修复。
欢迎同学们联系我,互相交流