WordPress WooCommerce如何基于国际尺码分类自动设置英国尺码分类值
问题排查&修复方案
以下是修复后可正常运行的代码:
// 优先使用WooCommerce专属钩子触发逻辑更精准,不需要可换回save_post add_action( 'woocommerce_process_product_meta', 'save_uk_size', 10, 1 ); function save_uk_size( $post_id ) { // 跳过自动保存、修订版本等非用户主动提交的无效场景 if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) { return; } // 先获取Post对象再判断文章类型,修复原代码变量调用顺序颠倒的问题 $post = get_post( $post_id ); if ( $post->post_type != 'product' ) { return; } // 初始化变量避免未定义警告 $prod_size_uk = ''; $prod_size_int = ''; // 获取国际尺码分类术语,增加错误判断 $terms = wp_get_post_terms( $post_id, 'product_size', array( 'fields' => 'all' ) ); if ( !is_wp_error( $terms ) && !empty( $terms ) ) { $prod_size_int = $terms[0]->slug; } // 匹配对应英国尺码ID switch ($prod_size_int) { case "FR-36": $prod_size_uk = 805; break; case "FR-38": $prod_size_uk = 806; break; // 其他尺码匹配规则自行补充 default: // 未匹配到对应尺码时默认清空英国尺码,不需要该逻辑可删除 $prod_size_uk = ''; break; } // 赋值英国尺码,第四个参数false表示覆盖原有值,设为true则追加多个值 if ( $prod_size_uk ) { wp_set_object_terms( $post_id, (int)$prod_size_uk, 'product_size_uk', false ); } else { // 未匹配到对应尺码时移除原有英国尺码,不需要该逻辑可删除 wp_remove_object_terms( $post_id, get_post_meta( $post_id, 'product_size_uk', true ), 'product_size_uk' ); } }
关键调整说明
- 修复了原代码核心逻辑错误:原代码在获取
$post对象之前就调用了$post->post_type做判断,导致整个判断逻辑完全失效 - 增加无效场景过滤,避免自动保存、后台草稿等场景触发异常赋值
- 补充了变量初始化和错误判断,避免未获取到国际尺码时出现PHP未定义变量警告
- 优化了赋值逻辑,支持未匹配到对应尺码时清空旧值,避免历史数据残留
- 如果业务允许一个商品对应多个国际尺码,把
$terms[0]->slug的逻辑改为循环遍历所有尺码逐一匹配即可
内容的提问来源于stack exchange,提问作者Austen Osborne
相关产品推荐
相关产品推荐

