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 .= ' ';
$output .= '' . esc_html($term->name) . ' ';
$output .= ' ';
$output .= '</div>';
}
}
$output .= '</div>';
} else {
$output = '<p>' . icl_t('hello-elementor-child', 'No brands found', 'Бренды не найдены') . '</p>';
}
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');
```
Я меня не появляетсся перевод, смотрите скрин