如何向WooCommerce REST API属性术语结果添加termmeta字段
可行实现方案
完全可以在不修改插件核心文件的前提下,把termmeta中存储的product_attribute_color字段加入WooCommerce REST API的属性术语返回结果,推荐使用WordPress原生的REST字段注册钩子实现,不会因为插件、主题升级丢失配置。
方案1:全局给所有产品属性术语接口追加颜色字段(推荐)
将以下代码添加到当前主题的functions.php文件,或者你自己写的自定义功能插件中即可:
add_action('rest_api_init', function () { // 获取所有已注册的WooCommerce产品属性 $attribute_taxonomies = wc_get_attribute_taxonomies(); if (empty($attribute_taxonomies)) { return; } foreach ($attribute_taxonomies as $tax) { $taxonomy_name = wc_attribute_taxonomy_name($tax->attribute_name); // 为每个属性的术语接口注册自定义字段 register_rest_field( $taxonomy_name, 'product_attribute_color', [ 'get_callback' => function ($term) { // 读取termmeta中存储的颜色值 return get_term_meta($term['id'], 'product_attribute_color', true); }, 'schema' => [ 'description' => 'Variation Swatches插件存储的属性色值', 'type' => 'string', 'context' => ['view', 'edit'], ], ] ); } });
代码添加完成后清理站点缓存,再请求/wp-json/wc/v3/products/attributes/COLOR_ATTRIBUTE_ID/terms接口,每个术语对象中就会新增product_attribute_color字段,返回你存在termmeta里的对应色值。
方案2:仅给颜色属性单独追加字段
如果不需要给所有产品属性加这个字段,只想给颜色属性返回色值,可以去掉循环,直接指定颜色属性对应的分类法名(通常默认颜色属性的分类法是pa_color,如果你自定义过别名替换成对应值即可),代码更精简:
add_action('rest_api_init', function () { register_rest_field( 'pa_color', // 替换为你的颜色属性实际对应的分类法标识 'color_code', // 这里可以自定义接口返回的字段名,比如改成color_code [ 'get_callback' => function ($term) { return get_term_meta($term['id'], 'product_attribute_color', true); }, ] ); });
注意事项
- 不要直接修改WooCommerce、Woo Variation Swatches的核心源码,否则后续插件升级会覆盖你的修改
- 如果站点开启了REST API缓存、对象缓存或者CDN缓存,添加代码后需要清空缓存再测试接口返回
- 如果需要字段支持编辑更新,可以在
register_rest_field的参数中追加update_callback参数处理写入逻辑,无头场景仅做数据读取的话不需要额外配置
内容的提问来源于stack exchange,提问作者Soheil
相关产品推荐
相关产品推荐

