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

WooCommerce Bookings特定产品类别字符串翻译函数失效求助

WooCommerce Bookings 特定类别产品错误提示修改失效问题

我在使用WooCommerce Bookings插件时,当客户未选择必填的预订日期,可预订产品的单品页面会显示*"Date is required - please choose one above"*的错误提示。我尝试编写以下PHP函数,仅对属于「Teaterkurser」产品类别的可预订产品修改该提示文本,但函数无法正常工作,找不到问题所在:

add_filter( 'gettext', 'ead2_translate_woocommerce_strings', 999, 3 );
function ead2_translate_woocommerce_strings( $translated, $untranslated, $domain ) { 

    if ( is_product() && has_term( 'Teaterkurser', 'product_cat' ) ) { 
        
        switch ( $untranslated ) {
            case 'Date is required - please choose one above':
                $translated = 'Datum väljs - vänta lite...';
                break;
        }
    }

      return $translated;
}

问题原因分析

  1. 文本域未限制:WooCommerce Bookings的错误提示属于插件自身的文本域(woocommerce-bookings),原代码未指定文本域,可能导致字符串匹配失效。
  2. 上下文判断不兼容AJAX:该错误提示通常是用户点击预订按钮后通过AJAX返回的,此时is_product()和全局$product对象可能无法正确获取,导致has_term()判断失败。

修正后的代码

add_filter( 'gettext', 'ead2_translate_bookings_error_text', 999, 3 );
function ead2_translate_bookings_error_text( $translated, $untranslated, $domain ) {
    // 仅处理WooCommerce Bookings的文本
    if ( $domain !== 'woocommerce-bookings' ) {
        return $translated;
    }

    // 获取当前产品ID,兼容AJAX请求场景
    global $product;
    $product_id = isset( $_POST['product_id'] ) ? intval( $_POST['product_id'] ) : ( is_object( $product ) ? $product->get_id() : 0 );

    // 验证产品是否属于目标类别
    if ( $product_id > 0 && has_term( 'Teaterkurser', 'product_cat', $product_id ) ) {
        if ( $untranslated === 'Date is required - please choose one above' ) {
            $translated = 'Datum väljs - vänta lite...';
        }
    }

    return $translated;
}

修正说明

  • 新增文本域判断,确保只处理WooCommerce Book插件的字符串
  • 兼容AJAX请求:通过$_POST['product_id']获取产品ID,解决AJAX场景下全局产品对象不存在的问题
  • 优化产品ID有效性判断,避免无效调用has_term()

内容的提问来源于stack exchange,提问作者Erik Almén

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:20:10