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; }
问题原因分析
- 文本域未限制:WooCommerce Bookings的错误提示属于插件自身的文本域(
woocommerce-bookings),原代码未指定文本域,可能导致字符串匹配失效。 - 上下文判断不兼容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
相关产品推荐
相关产品推荐

