如何将Woocommerce可变产品的变体GTIN添加到结构化数据中
问题修复思路
- 补全Schema规范要求的
@type字段前缀,确保结构可以被爬虫正确解析 - 每个变体的offer节点下新增对应GTIN字段,读取变体自身的
_EAN自定义字段值 - 修复未定义变量的问题,补充
$priceuntil的取值逻辑(可根据实际业务规则调整) - 修正库存状态取值逻辑,读取每个变体自身的库存状态而不是父产品的,保证数据准确性
备注:如果你的EAN编码为13位,将代码中所有
gtin8替换为gtin13即可,符合Schema对应字段规范。
修正后完整代码
// 向页面插入结构化数据 function set_structured_data( $markup, $product ) { // 公共品牌字段提前赋值 $markup['brand'] = array( '@type' => 'Brand', 'name' => get_post_meta( $product->get_id(), '_brand', true ) ); if ($product->is_type('simple')){ // 简单产品直接挂载gtin8到根节点 $markup['gtin8'] = get_post_meta( $product->get_id(), '_EAN', true ); } if ($product->is_type('variable')){ $offers = []; $priceuntil = '2030-12-31'; // 替换为实际的价格有效期逻辑,比如促销结束日期 $available_variations = $product->get_available_variations(); foreach ($available_variations as $variation) { $variation_id = $variation['variation_id']; $variproduct = wc_get_product($variation_id); // 读取变体自身的库存状态 $stock = $variproduct->get_stock_status(); // 读取变体自身的EAN值 $variation_ean = get_post_meta( $variation_id, '_EAN', true ); $offers[] = array( '@type' => 'Offer', // 补全@前缀符合Schema规范 'price' => $variproduct->get_price(), 'priceValidUntil' => $priceuntil, 'gtin8' => $variation_ean, // 新增变体GTIN字段 'priceSpecification' => array( '@type' => 'PriceSpecification', 'price' => $variproduct->get_price(), 'priceCurrency' => get_woocommerce_currency(), 'valueAddedTaxIncluded' => 'http://schema.org/True' ), 'priceCurrency' => get_woocommerce_currency(), 'availability' => 'http://schema.org/'.$stock, 'url' => $variproduct->get_permalink(), // 替换为变体自身的链接,数据更准确 'seller' => array ( '@type' => 'Organization', 'name' => 'HeatPerformance®', 'url' => get_home_url(), ) ); } $markup['offers'] = $offers; } return $markup; } add_filter( 'woocommerce_structured_data_product', 'set_structured_data', 99, 2 );
验证方式
修改完成后直接查看页面源代码的结构化数据段,确认每个offer节点下已经存在对应的gtin8/gtin13值即可。
内容的提问来源于stack exchange,提问作者Webdever
相关产品推荐
相关产品推荐

