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

基于产品标签与变体修改WooCommerce库存文本的问题求助

问题分析
  1. 标签判断逻辑错误:原代码中has_term()未传入产品ID,处理变体产品时会默认使用全局$post对象,而变体产品的标签通常继承自父变量产品,导致标签匹配不准确。
  2. 多标签文本覆盖:多个独立的if语句会让同时带有多个目标标签的产品,被最后一个匹配的标签覆盖文本,比如同时带1101和1104标签时,最终显示1104对应的文本。
  3. 场景缺失:未处理无库存及预售(back-orders)场景的文本自定义。
修正后的代码
add_filter( 'woocommerce_get_availability_text', 'woo_custom_stock_availability_text', 99, 2 );
function woo_custom_stock_availability_text( $availability, $product ) {
    // 获取正确的产品ID:变体产品取父产品ID,简单产品取自身ID
    $product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
    
    // 定义标签ID与对应文本的映射,键为标签ID,值为包含库存、无库存文本的数组
    $tag_text_map = [
        1100 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 20 t/m 25 werkdagen voor chroom, 40 t/m 60 werkdagen voor kleur.',
            'out_of_stock' => 'Niet op voorraad, levertijd 20 tot 25 werkdagen.'
        ],
        1101 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 20 t/m 25 werkdagen voor chroom, 40 t/m 60 werkdagen voor kleur.',
            'out_of_stock' => 'Niet op voorraad, levertijd 20 tot 25 werkdagen.'
        ],
        1102 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 20 t/m 25 werkdagen voor chroom, 40 t/m 60 werkdagen voor Mat-zwart.',
            'out_of_stock' => 'Niet op voorraad, levertijd 20 tot 25 werkdagen.'
        ],
        1103 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 1 t/m 5 werkdagen.',
            'out_of_stock' => 'Niet op voorraad, levertijd 1 tot 5 werkdagen.'
        ],
        1104 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 4 t/m 7 werkdagen.',
            'out_of_stock' => 'Niet op voorraad, levertijd 4 tot 7 werkdagen.'
        ],
        1105 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 7 t/m 14 werkdagen.',
            'out_of_stock' => 'Niet op voorraad, levertijd 7 tot 14 werkdagen.'
        ],
        1106 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 3 tot 5 weken.',
            'out_of_stock' => 'Niet op voorraad, levertijd 3 tot 5 weken.'
        ],
        1107 => [
            'in_stock' => 'Voorraad: ' . $product->get_stock_quantity() . ' stuks. Verwachte levertijd 8 tot 12 weken.',
            'out_of_stock' => 'Niet op voorraad, levertijd 8 tot 12 weken.'
        ]
    ];

    // 遍历标签映射,找到第一个匹配的标签后立即退出
    foreach ( $tag_text_map as $tag_id => $texts ) {
        if ( has_term( $tag_id, 'product_tag', $product_id ) ) {
            if ( $product->is_in_stock() && $product->managing_stock() ) {
                $availability = $texts['in_stock'];
            } else {
                // 统一处理无库存及预售场景
                $availability = $texts['out_of_stock'];
            }
            break;
        }
    }

    return $availability;
}
代码说明
  • 标签判断准确:自动识别变体产品,使用父产品ID检查标签,避免全局上下文导致的判断错误。
  • 避免文本覆盖:遍历匹配到第一个标签后立即退出循环,解决多标签场景下的文本覆盖问题。
  • 易维护性:用数组集中管理标签与对应文本,后续修改或新增标签只需更新数组即可。
  • 全场景覆盖:处理了有库存、无库存及预售场景的文本自定义,符合需求。

内容的提问来源于stack exchange,提问作者René R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:45:01