WP All Import使用教程:如何将WooCommerce产品SKU替换为对应产品ID
实现方案
str_replace属于静态字符串替换,需要提前穷举所有SKU和对应产品ID的映射关系才能配置,维护成本很高,更推荐直接调用WooCommerce原生的SKU查询方法实现动态转换,代码示例如下:
如果你使用WP All Import等第三方导入插件
在自定义字段的导入配置中,选择「通过PHP函数处理导入值」,先添加以下自定义函数:
function convert_sku_list_to_pid_list( $sku_string ) { // 拆分|分隔的SKU,同时去除前后空格和空值 $sku_list = array_map( 'trim', explode( '|', $sku_string ) ); $pid_list = []; foreach ( $sku_list as $sku ) { if ( empty( $sku ) ) continue; // 调用WooCommerce内置方法通过SKU获取产品ID $product_id = wc_get_product_id_by_sku( $sku ); if ( $product_id ) { $pid_list[] = $product_id; } } // 若需要输出|分隔的ID字符串,保留下行 return implode( '|', $pid_list ); // 若需要数组格式存储到自定义字段,替换为下行 // return $pid_list; }
然后在对应自定义字段的导入值位置,传入你的feed字段即可:[convert_sku_list_to_pid_list({metaparent_sku[1]})]
如果你自己编写导入脚本
可以直接参考以下逻辑处理:
// 确保WooCommerce核心函数已加载 if ( ! function_exists( 'wc_get_product_id_by_sku' ) ) { return; } // 获取feed中的SKU字符串 $feed_sku_value = 'BDCD7 | BDAUX | BDCA1 | ADUP89'; $sku_array = array_map( 'trim', explode( '|', $feed_sku_value ) ); $matched_pid_array = []; foreach ( $sku_array as $single_sku ) { $pid = wc_get_product_id_by_sku( $single_sku ); if ( $pid ) { $matched_pid_array[] = $pid; } } // 写入目标自定义字段,示例字段名为custom_product_rel_id update_post_meta( $current_post_id, 'custom_product_rel_id', implode( '|', $matched_pid_array ) );
补充说明
- 如果你用的导入插件自带lookup映射功能,也可以提前导出站点全量SKU和产品ID的对应表,配置lookup规则实现转换,不过这种方式需要在新增产品后同步更新映射表,灵活性不如动态函数方案。
- 请提前确认站点内所有产品SKU全局唯一,否则
wc_get_product_id_by_sku只会返回第一个匹配到的产品ID。
内容的提问来源于stack exchange,提问作者Coer
相关产品推荐
相关产品推荐

