You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:36:02