WPML
Статус
Ожидается ответ автора
Связанный плагин/тема
Ultimate Membership Pro
Теги темы
Compatibility

Обзор проблемы

При использовании Ultimate Membership Pro с WPML Вы можете столкнуться с проблемой, при которой значения флажков, используемые в профилях участников и фильтрах каталога, не переводимы. Это не позволяет переведенным меткам корректно отображаться на переведенных страницах каталога или в формах.

Обходное решение

Перед продолжением убедитесь, что у Вас есть полная резервная копия сайта.

1- Удалите некорректные переводы

  • Перейдите в WPML > Перевод строк
  • Отфильтруйте по статусу «Перевод завершен»
  • Найдите строки в поле с именем [ihc_user_fields]
  • Выберите все эти строки и удалите их — это строки значений, и они не должны переводиться.

2- Измените шаблон фильтра на фронтенде

  • Откройте: wp-content/plugins/indeed-membership-pro/public/views/listing_users-filter.php
  • Найдите: строку 167 в блоке case ‘checkbox’
  • Замените:

<?php
foreach ($field['values'] as $v){
    if (is_array($get_value)){
        $checked = (in_array($v, $get_value)) ? 'checked' : '';
    } else {
        $checked = ($v==$get_value) ? 'checked' : '';
    }
    ?>
    <div class="iump-form-checkbox">
        <input type="checkbox" name="<?php echo esc_attr($field['name']);?>[]" value="<?php echo esc_attr(ihc_correct_text($v));?>" <?php echo esc_attr($checked);?> />
        <?php echo esc_html(ihc_correct_text($v));?>
    </div>
    <?php
}
?>

На:

<?php
foreach ($field['values'] as $v){
    if (is_array($get_value)){
        $checked = (in_array($v, $get_value)) ? 'checked' : '';
    } else {
        $checked = ($v==$get_value) ? 'checked' : '';
    }

    // WPML: Separate value and label
    $wpml_original_value = ihc_correct_text($v);
    $wpml_string_name = 'checkbox_option_' . $field['name']; 
    do_action( 'wpml_register_single_string', 'ihc', $wpml_string_name . '_' . sanitize_title($v), $wpml_original_value );
    $wpml_translated_label = apply_filters( 'wpml_translate_single_string', $wpml_original_value, 'ihc', $wpml_string_name . '_' . sanitize_title($v) );
?>
    <div class="iump-form-checkbox">
        <input type="checkbox" name="<?php echo esc_attr($field['name']);?>[]" value="<?php echo esc_attr(ihc_correct_text($v));?>" <?php echo esc_attr($checked);?> />
        <?php echo esc_html($wpml_translated_label); ?>
    </div>
<?php
}
?>

3- Исправьте метки чекбоксов в форме регистрации

  • Откройте: wp-content/plugins/indeed-membership-pro/classes/IndeedForms.php
  • Найдите: функцию чекбокса (примерно на строке 129)
  • Замените:

$output .= ihc_correct_text( $v );
На:
$output .= __( ihc_correct_text( $v ), 'ihc' );</ul>

4- Инициируйте регистрацию строк

  • Посетите страницу каталога на фронтенде, чтобы загрузить новые строки.
  • Перейдите в WPML > Перевод строк и переведите только недавно зарегистрированные строки в домене «ihc» (с именами наподобие checkbox_option_name).

Все известные проблемы →