Skip Navigation

This thread is resolved. Here is a description of the problem and solution.

Проблема:
Клиент создал таксономию для WooCommerce Brands на своем сайте, но она не переводится.
Решение:
Если вы столкнулись с аналогичной проблемой, мы рекомендуем сделать вашу кастомную таксономию переводимой. Перейдите на страницу WPML → Настройки и прокрутите до раздела таксономий, которую вы хотите сделать переводимой, и установите значение как переводимо. Для более подробной информации посетите документацию по переводу кастомных типов.

Решение может быть неактуальным, так как оно может быть устаревшим или не подходить для вашего случая. Если проблема сохраняется, рекомендуем открыть новый тикет в службе поддержки. Также настоятельно рекомендуем проверить известные проблемы, убедиться в версии постоянного исправления и подтвердить, что у вас установлены последние версии тем и плагинов.

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

This topic contains 3 replies, has 2 voices.

Last updated by Andrey 4 months, 1 week ago.

Assisted by: Andrey.

Author Posts
July 6, 2024 at 7:36 pm #15904228

denM

<b>Background of the issue: </b>
I created a taxonomy for WooCommerce Brands on my site hidden link.

<b>Symptoms: </b>
The taxonomy does not translate.

<b>Questions: </b>
How can I translate the WooCommerce Brands taxonomy using WPML?

on the chest
English is shown for translation. I have Russian by default?

ScreenShot_20240706224808.jpeg
July 7, 2024 at 8:56 am #15906732

Andrey
Supporter

Languages: English (English ) Russian (Русский )

Timezone: Europe/Kyiv (GMT+02:00)

Thank you for contacting WPML support.

Here is more information: https://wpml.org/compatibility/2014/09/woocommerce-brands/ https://wpml.org/documentation/related-projects/woocommerce-multilingual/#taxonomies

For the text you mentioned in WPML → String Translation, you can also change the original language of the string by choosing "Языки доменов".

https://wpml.org/documentation/getting-started-guide/string-translation/how-to-change-the-source-language-of-strings/

Translation-of-the-woocommerce-taxonomy-WPML.png
July 7, 2024 at 10:34 am #15907053

denM

Дело в том, что я не использовал Бренды WooCommerce.
Я создал сам таксономию. вот код
```
add_action('init', 'create_brand_taxonomy', 0);

function create_brand_taxonomy() {
$labels = array(
'name' => _x('Бренды', 'taxonomy general name', 'hello-elementor-child'),
'singular_name' => _x('Бренд', 'taxonomy singular name', 'hello-elementor-child'),
'search_items' => __('Искать Бренды', 'hello-elementor-child'),
'all_items' => __('Все Бренды', 'hello-elementor-child'),
'parent_item' => __('Родительский Бренд', 'hello-elementor-child'),
'parent_item_colon' => __('Родительский Бренд:', 'hello-elementor-child'),
'edit_item' => __('Редактировать Бренд', 'hello-elementor-child'),
'update_item' => __('Обновить Бренд', 'hello-elementor-child'),
'add_new_item' => __('Добавить новый Бренд', 'hello-elementor-child'),
'new_item_name' => __('Новое название Бренда', 'hello-elementor-child'),
'menu_name' => __('Бренд', 'hello-elementor-child'),
);

register_taxonomy('pwb-brand', array('product'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'brand'),
));
}

// Додаємо поля для зображень брендів у адмін-панель
function add_brand_image_field() {
wp_enqueue_media();
?>
<div class="form-field">
<label for="brand-image"><?php echo icl_t('hello-elementor-child', 'Brand Image', 'Изображение Бренда'); ?></label>
<input type="hidden" id="brand-image" name="brand-image" value="">
<div id="brand-image-wrapper"></div>
<button type="button" class="button" id="upload-brand-image-button"><?php echo icl_t('hello-elementor-child', 'Add Image', 'Добавить изображение'); ?></button>
<button type="button" class="button" id="remove-brand-image-button" style="display:none;"><?php echo icl_t('hello-elementor-child', 'Remove Image', 'Удалить изображение'); ?></button>
</div>
<script>
jQuery(document).ready(function($) {
var frame;
$('#upload-brand-image-button').on('click', function(e) {
e.preventDefault();
if (frame) {
frame.open();
return;
}
frame = wp.media({
title: '<?php echo icl_t('hello-elementor-child', 'Select or upload brand image', 'Выберите или загрузите изображение бренда'); ?>',
button: {
text: '<?php echo icl_t('hello-elementor-child', 'Use this image', 'Использовать это изображение'); ?>'
},
multiple: false
});
frame.on('select', function() {
var attachment = frame.state().get('selection').first().toJSON();
$('#brand-image').val(attachment.id);
$('#brand-image-wrapper').html('<img src="' + attachment.url + '" style="max-width:100%;"/>');
$('#remove-brand-image-button').show();
});
frame.open();
});
$('#remove-brand-image-button').on('click', function(e) {
e.preventDefault();
$('#brand-image').val('');
$('#brand-image-wrapper').html('');
$(this).hide();
});
});
</script>
<?php
}
add_action('pwb-brand_add_form_fields', 'add_brand_image_field', 10, 2);

// Сохраняем изображение бренда
function save_brand_image($term_id) {
if (isset($_POST['brand-image'])) {
update_term_meta($term_id, 'brand-image', $_POST['brand-image']);
}
}
add_action('created_pwb-brand', 'save_brand_image', 10, 2);

// Добавляем поле изображения в форму редактирования бренда
function edit_brand_image_field($term, $taxonomy) {
$image_id = get_term_meta($term->term_id, 'brand-image', true);
$image_url = wp_get_attachment_url($image_id);

// Проверка на наличие ошибки
if (is_wp_error($image_url)) {
$image_url = ''; // Если есть ошибка, устанавливаем пустую строку
}
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="brand-image"><?php echo icl_t('hello-elementor-child', 'Brand Image', 'Изображение Бренда'); ?></label></th>
<td>
<input type="hidden" id="brand-image" name="brand-image" value="<?php echo esc_attr($image_id); ?>">
<div id="brand-image-wrapper"><?php if ($image_url) : ?><img src="<?php echo esc_attr($image_url); ?>" style="max-width:100%;"><?php endif; ?></div>
<button type="button" class="button" id="upload-brand-image-button"><?php echo icl_t('hello-elementor-child', 'Replace Image', 'Заменить изображение'); ?></button>
<button type="button" class="button" id="remove-brand-image-button" <?php echo $image_url ? '' : 'style="display:none;"'; ?>><?php echo icl_t('hello-elementor-child', 'Remove Image', 'Удалить изображение'); ?></button>
</td>
</tr>
<script>
jQuery(document).ready(function($) {
var frame;
$('#upload-brand-image-button').on('click', function(e) {
e.preventDefault();
if (frame) {
frame.open();
return;
}
frame = wp.media({
title: '<?php echo icl_t('hello-elementor-child', 'Select or upload brand image', 'Выберите или загрузите изображение бренда'); ?>',
button: {
text: '<?php echo icl_t('hello-elementor-child', 'Use this image', 'Использовать это изображение'); ?>'
},
multiple: false
});
frame.on('select', function() {
var attachment = frame.state().get('selection').first().toJSON();
$('#brand-image').val(attachment.id);
$('#brand-image-wrapper').html('<img src="' + attachment.url + '" style="max-width:100%;"/>');
$('#remove-brand-image-button').show();
});
frame.open();
});
$('#remove-brand-image-button').on('click', function(e) {
e.preventDefault();
$('#brand-image').val('');
$('#brand-image-wrapper').html('');
$(this).hide();
});
});
</script>
<?php
}
add_action('pwb-brand_edit_form_fields', 'edit_brand_image_field', 10, 2);

// Обновляем изображение бренда
function update_brand_image($term_id) {
if (isset($_POST['brand-image'])) {
update_term_meta($term_id, 'brand-image', $_POST['brand-image']);
}
}
add_action('edited_pwb-brand', 'update_brand_image', 10, 2);

// Добавляем новую колонку в административный список брендов
function add_image_column_to_brand_list($columns) {
$new_columns = array_slice($columns, 0, 1, true) +
['brand_image' => icl_t('hello-elementor-child', 'Image', 'Изображение')] +
array_slice($columns, 1, null, true);
return $new_columns;
}
add_filter('manage_edit-pwb-brand_columns', 'add_image_column_to_brand_list');

// Отображаем изображение бренда в новой колонке
function display_brand_image_in_brand_list($deprecated, $column_name, $term_id) {
if ($column_name == 'brand_image') {
$image_id = get_term_meta($term_id, 'brand-image', true);
$image_url = wp_get_attachment_url($image_id);
if (!is_wp_error($image_url) && $image_url) {
echo '<img src="' . esc_url($image_url) . '" style="width: 50px; height: auto;">';
} else {
echo '—'; // Отображаем тире, если изображения нет или есть ошибка
}
}
}
add_action('manage_pwb-brand_custom_column', 'display_brand_image_in_brand_list', 10, 3);

function custom_admin_product_list_styles() {
?>
<style>
.column-name { width: 20%; } /* Колонка с названием товара */
.column-sku { width: 10%; } /* Колонка с артикулом */
.column-price { width: 15%; } /* Колонка с ценой */
#product_tag.column-product_tag { width: 50px !important; }
.column-rank_math_seo_details { width: 170px; }
.column-taxonomy-brand { width: 5%; }
</style>
<?php
}
add_action('admin_head', 'custom_admin_product_list_styles');

function display_brand_logos() {
$terms = get_terms(array(
'taxonomy' => 'pwb-brand',
'hide_empty' => false,
));

if (!empty($terms) && !is_wp_error($terms)) {
$output = '<div class="brand-logos">';
foreach ($terms as $term) {
$image_id = get_term_meta($term->term_id, 'brand-image', true);
$image_url = wp_get_attachment_url($image_id);
$term_link = get_term_link($term);

// Проверка на наличие ошибки
if (is_wp_error($image_url)) {
$image_url = ''; // Если есть ошибка, устанавливаем пустую строку
}

if ($image_url && !is_wp_error($term_link)) {
$output .= '<div class="brand-logo">';
$output .= '';
$output .= '' . esc_attr($term- data-lazy-src=

return $output;
}
add_shortcode('brand_logos', 'display_brand_logos');

// Регистрируем строки для перевода с WPML
function register_wpml_strings() {
if (function_exists('icl_register_string')) {
icl_register_string('hello-elementor-child', 'Brand', 'Бренды');
icl_register_string('hello-elementor-child', 'Brand Image', 'Изображение Бренда');
icl_register_string('hello-elementor-child', 'Add Image', 'Добавить изображение');
icl_register_string('hello-elementor-child', 'Remove Image', 'Удалить изображение');
icl_register_string('hello-elementor-child', 'No brands found', 'Бренды не найдены');
}
}
add_action('init', 'register_wpml_strings');

// Регистрируем таксономию для перевода в WPML
function register_brand_taxonomy_for_wpml() {
// Проверяем, доступна ли функция
if (function_exists('icl_register_string')) {
// Регистрируем таксономию "Бренд" для перевода
do_action('wpml_register_single_string', 'hello-elementor-child', 'Brand', 'Бренды');
do_action('wpml_register_single_string', 'hello-elementor-child', 'Brand Image', 'Изображение Бренда');
do_action('wpml_register_single_string', 'hello-elementor-child', 'Add Image', 'Добавить изображение');
do_action('wpml_register_single_string', 'hello-elementor-child', 'Remove Image', 'Удалить изображение');
do_action('wpml_register_single_string', 'hello-elementor-child', 'No brands found', 'Бренды не найдены');
}
}
add_action('init', 'register_brand_taxonomy_for_wpml');
```
Я меня не появляетсся перевод, смотрите скрин

ScreenShot_20240707133324.jpeg
July 8, 2024 at 8:04 am #15910776

Andrey
Supporter

Languages: English (English ) Russian (Русский )

Timezone: Europe/Kyiv (GMT+02:00)

Скорее всего, Вы не сделали Вашу кастомнную таксономию переводимой.

Перейдите на страницу WPML → Настройки и прокрутите до раздела таксономий, которую Вы хотите сделать переводимой и установите значение, как переводимо.

https://wpml.org/faq/how-to-translate-custom-types/#how-can-i-make-custom-types-translatable