WordPress中Mailchimp for WooCommerce插件德语翻译问题求助
问题:Mailchimp for WooCommerce 我的账户页面文字无法德语化(子主题方案无效)
我在WordPress网站上安装了Mailchimp for WooCommerce插件,该插件在“我的账户(my-account)”页面提供订阅、退订及通知设置选项,但当前显示为英文,需改为德语。直接修改插件文件会在插件更新后丢失修改内容,尝试使用子主题方案但未生效,相关代码如下:
<?php $user = wp_get_current_user(); $mailchimp_user_subscription_status = ($user && $user->ID) ? get_user_meta($user->ID, 'mailchimp_woocommerce_is_subscribed', true) : false; if ($mailchimp_user_subscription_status !== false && $mailchimp_user_subscription_status !== 'archived') { $mailchimp_my_account = '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">'; $mailchimp_my_account .= '<label for="mailchimp_woocommerce_is_subscribed">'; $mailchimp_my_account .= '<input type="radio" class="woocommerce-form__input woocommerce-form__input-radio input-radio" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_subscribed" value="1"'; $mailchimp_my_account .= $mailchimp_user_subscription_status === '1' ? ' checked="checked"' : ''; $mailchimp_my_account .= '>'; $mailchimp_my_account .= __( 'zum Newsletter anmelden', 'mailchimp-for-woocommerce' ); $mailchimp_my_account .= '</label>'; $mailchimp_my_account .= '</p>'; $mailchimp_my_account .= '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">'; $mailchimp_my_account .= '<label for="mailchimp_woocommerce_is_unsubscribed">'; $mailchimp_my_account .= '<input type="radio" class="woocommerce-form__input woocommerce-form__input-radio input-radio" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_unsubscribed" value="unsubscribed"'; $mailchimp_my_account .= $mailchimp_user_subscription_status === 'unsubscribed' ? ' checked="checked"' : ''; $mailchimp_my_account .= '>'; $mailchimp_my_account .= __( 'vom Newsletter abmelden', 'mailchimp-for-woocommerce' ); $mailchimp_my_account .= '</label>'; $mailchimp_my_account .= '</p>'; $mailchimp_my_account .= '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">'; $mailchimp_my_account .= '<label for="mailchimp_woocommerce_is_transactional">'; $mailchimp_my_account .= '<input type="radio" class="woocommerce-form__input woocommerce-form__input-radio input-radio" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_transactional" value="0"'; $mailchimp_my_account .= $mailchimp_user_subscription_status === '0' ? ' checked="checked"' : ''; $mailchimp_my_account .= '>'; $mailchimp_my_account .= __( 'erhalte Benachrichtigungen', 'mailchimp-for-woocommerce' ); $mailchimp_my_account .= '</label>'; $mailchimp_my_account .= '</p>'; echo wp_kses( apply_filters( 'mailchimp_woocommerce_my_account_field', $mailchimp_my_account, $mailchimp_user_subscription_status ), mailchimp_expanded_alowed_tags() ); if (isset($gdpr_fields) && $gdpr_fields) { echo wp_kses($gdpr_fields, mailchimp_expanded_alowed_tags()); } } else { echo '<input type="hidden" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_subscribed" value="' . ($mailchimp_user_subscription_status === 'archived' ? 'archived' : '1') . '">'; } ?>
可行解决方法
方法1:用gettext过滤器直接覆盖文本
WordPress的gettext过滤器可指定覆盖插件文本域的翻译内容,不受插件更新影响。将以下代码添加到子主题的functions.php文件中:
add_filter('gettext', 'custom_mailchimp_woocommerce_translations', 10, 3); function custom_mailchimp_woocommerce_translations($translated_text, $text, $domain) { if ($domain === 'mailchimp-for-woocommerce') { switch ($text) { case 'Subscribe to our newsletter': // 替换为插件原英文文本 $translated_text = 'zum Newsletter anmelden'; break; case 'Unsubscribe from our newsletter': $translated_text = 'vom Newsletter abmelden'; break; case 'Receive transactional notifications only': $translated_text = 'erhalte Benachrichtigungen'; break; // 如需翻译其他文本,继续添加对应case } } return $translated_text; }
注意:需确保case中的英文文本与插件源码内的原始文本完全一致,可通过查看插件文件或开发者工具检查页面元素确认。
方法2:利用插件过滤器重写整个表单
代码中插件提供了mailchimp_woocommerce_my_account_field过滤器,可直接替换表单HTML内容,完全自定义文本。将以下代码添加到子主题functions.php:
add_filter('mailchimp_woocommerce_my_account_field', 'custom_mailchimp_my_account_form', 10, 2); function custom_mailchimp_my_account_form($original_html, $subscription_status) { $user = wp_get_current_user(); if ($user && $user->ID) { $status = get_user_meta($user->ID, 'mailchimp_woocommerce_is_subscribed', true); if ($status !== false && $status !== 'archived') { $custom_html = '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">'; $custom_html .= '<label for="mailchimp_woocommerce_is_subscribed">'; $custom_html .= '<input type="radio" class="woocommerce-form__input woocommerce-form__input-radio input-radio" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_subscribed" value="1" ' . checked($status === '1', true, false) . '>'; $custom_html .= 'zum Newsletter anmelden'; $custom_html .= '</label></p>'; $custom_html .= '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">'; $custom_html .= '<label for="mailchimp_woocommerce_is_unsubscribed">'; $custom_html .= '<input type="radio" class="woocommerce-form__input woocommerce-form__input-radio input-radio" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_unsubscribed" value="unsubscribed" ' . checked($status === 'unsubscribed', true, false) . '>'; $custom_html .= 'vom Newsletter abmelden'; $custom_html .= '</label></p>'; $custom_html .= '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">'; $custom_html .= '<label for="mailchimp_woocommerce_is_transactional">'; $custom_html .= '<input type="radio" class="woocommerce-form__input woocommerce-form__input-radio input-radio" name="mailchimp_woocommerce_is_subscribed_radio" id="mailchimp_woocommerce_is_transactional" value="0" ' . checked($status === '0', true, false) . '>'; $custom_html .= 'erhalte Benachrichtigungen'; $custom_html .= '</label></p>'; return $custom_html; } } return $original_html; }
此方案直接接管表单输出,完全控制所有文本,不受插件翻译文件影响。
方法3:创建自定义PO/MO翻译文件
若需翻译插件更多文本,可创建专属德语翻译文件:
- 进入插件语言目录:
wp-content/plugins/mailchimp-for-woocommerce/languages - 复制
mailchimp-for-woocommerce.pot文件,重命名为mailchimp-for-woocommerce-de_DE.po - 用Poedit工具打开该文件,将英文文本替换为德语
- 生成对应的
.mo文件,将两个文件上传至wp-content/languages/plugins目录(此目录优先级高于插件自带语言文件,更新不会被覆盖)
内容的提问来源于stack exchange,提问作者sauerkirsche
相关产品推荐
相关产品推荐

