跳至正文

将 GTIN 添加到 WooCommerce 产品架构中 – 无插件

WooCommerce 是目前最好用的商城系统之一,而且是免费的,但是它默认的产品结构中并没有产品品牌及商品识别码 GTIN,UPC,EAN,MPN…

你可能提交Sitemap给Google Search console后,会得到如下一些警告:

  • 未填写字段“brand”
  • 未填写字段“aggregateRating”
  • 未填写字段“review”
  • 未提供全局标识符(例如 gtin、mpn、isbn)

先了解一下这些是什么。

构成GTIN的数据结构包括:

  1. GTIN-12(UPC-A):主要用于北美,12位数字
  2. GTIN-8(EAN / UCC-8):主要在北美以外使用,8位数字
  3. GTIN-13(EAN / UCC-13):主要在北美以外使用,13位数字
  4. 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 位数字

在商业中使用商品识别码的好处

  1. 商品识别码消除了手动输入商品信息的必要,从而提高了速度,效率和生产率。例如,UPC的问世使计算机计费和更快的结帐成为可能。
  2. 它们有助于更准确地追踪库存。
  3. 它们是通用的:每个零售商和每个电商平台都将为某个商品使用相同的代码。

其实,我们只需要把以上元数据列出来,告诉搜索引擎就可以了。

那么要如何设置这些元数据,告诉搜索引擎呢?无外乎是两种,一是使用插件,二是使用代码。对于喜欢用插件的人来说就很简单了,比如插件WooCommerce – Yoast SEO。对于不喜欢用插件的,比如我,就喜欢使用代码来解决,避免一堆的插件,导致网站运行速度变慢。

方法很简单,这与我前面写的一篇很相似将品牌添加到 WooCommerce 产品架构中 – 无插件。它们可以合作无间。

我们需要做三件事:

  1. 在后端添加一些文本输入框,这样我们就可以编辑GTIN,GTIN13,MPN,EAN13等。在产品层面。
  2. 编写一些后端代码,在保存产品时捕获这些字段,然后将这些值存储在产品的post_meta中.
  3. 当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';

编辑和保存产品设置

让我们先解决产品编辑的问题。这就是我们在编辑简单产品时的目标:

在 WooCommerce 产品信息中编辑 GTIN

为了呈现输入框,我们需要从 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进行测试。当您展开产品部分时,您应该会看到类似这样的内容(当然,有更合理的数据):

GTIN and MPN 在 WooCommerce 的产品结构

当你对你的产品模式感到满意时,提示谷歌搜索控制台重新索引你的页面,你的警告会在几天内得到修复。

欢迎同学们联系我,互相交流

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注