В стандартном WordPress категории не имеют изображений. Но иногда это нужно:
✔ для каталога товаров,
✔ для рубрик новостей,
✔ для красивой сетки категорий,
✔ для блога с превью.
В этой статье разберём, как добавить возможность загружать картинку для каждой категории, сохранить её и вывести на сайте.
Никаких плагинов — только небольшой кусок кода.
Этот код выводит новое поле и две кнопки:
+ загрузить
– удалить

Скопируйте код и вставьте в файл:
/wp-content/themes/ВАША_ТЕМА/functions.php
или в functions.php дочерней темы (желательно).
Код добавления поля и медиазагрузчика
add_action( 'category_edit_form_fields', 'mayak_update_category_image' , 10, 2 );
function mayak_update_category_image ( $term, $taxonomy ) {
?>
<style>
img{border:3px solid #ccc;}
.term-group-wrap p{float:left;}
.term-group-wrap input{font-size:18px;font-weight:bold;width:40px;}
#bitton_images{font-size:18px;}
#bitton_images_remove{font-size:18px;margin:5px 5px 0 0;}
</style>
<tr class="form-field term-group-wrap">
<th scope="row">
<label for="id-cat-images">Изображение</label>
</th>
<td>
<p><input type="button" class="button bitton_images" id="bitton_images" name="bitton_images" value="+" /><br>
<input type="button" class="button bitton_images_remove" id="bitton_images_remove" name="bitton_images_remove" value="–" /></p>
<?php $id_images = get_term_meta ( $term->term_id, 'id-cat-images', true ); ?>
<input type="hidden" id="id-cat-images" name="id-cat-images" value="<?php echo $id_images; ?>">
<div id="cat-image-miniature">
<?php if (empty($id_images)) { ?>
<img src="/wp-content/uploads/2023/03/logo.png" alt="Zaglushka" width="84" height="89"/>
<?php } else {?>
<?php echo wp_get_attachment_image($id_images, 'thumbnail'); ?>
<?php } ?>
</div>
</td>
</tr>
<?php
if(preg_match("#tag_ID=([0-9.]+)#", $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']))
add_action( 'admin_footer', 'mayak_loader' );
function mayak_loader() { ?>
<script>
jQuery(document).ready(function($) {
function mayak_image_upload(button_class) {
var mm = true,
_orig_send_attachment = wp.media.editor.send.attachment;
$('body').on('click', button_class, function(e) {
var mt = $(this);
mm = true;
wp.media.editor.send.attachment = function(props, attachment){
if (mm) {
$('#id-cat-images').val(attachment.id);
$('#cat-image-miniature').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;" />');
$('#cat-image-miniature .custom_media_image').attr('src',attachment.sizes.thumbnail.url).css('display','block');
} else {
return _orig_send_attachment.apply(mt, [props, attachment]);
}
}
wp.media.editor.open(mt);
return false;
});
}
mayak_image_upload('.bitton_images.button');
$('body').on('click','.bitton_images_remove',function(){
$('#id-cat-images').val('');
$('#cat-image-miniature').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;" />');
});
$(document).ajaxComplete(function(event, xhr, settings) {
var mk = settings.data.split('&');
if( $.inArray('action=add-tag', mk) !== -1 ){
var mh = xhr.responseXML;
var mr = $(mh).find('term_id').text();
if(mr!=""){
$('#cat-image-miniature').html('');
}
}
});
});
</script>
<?php
}
}
Этот код записывает ID изображения в базу данных:
add_action( 'edited_category','mayak_updated_category_image' , 10, 2 );
function mayak_updated_category_image ( $term_id, $tt_id ) {
if( isset( $_POST['id-cat-images'] ) && '' !== $_POST['id-cat-images'] ){
update_term_meta($term_id, 'id-cat-images', $_POST['id-cat-images']);
} else {
update_term_meta($term_id, 'id-cat-images', '');
}
}
Зависит от того, где вы хотите его отобразить.
Вариант 1: Внутри файлов категории (category.php, archive.php)
Обычно путь:
/wp-content/themes/ВАША_ТЕМА/category.php
Вставьте туда:
<?php
$term = get_queried_object();
$image_id = get_term_meta($term->term_id, 'id-cat-images', true);
if ($image_id) {
echo '<div class="category-image">';
echo wp_get_attachment_image($image_id, 'large');
echo '</div>';
}
?>
Вариант 2: Вывести список подкатегорий с картинками
Часто используют для каталога.
Вставьте функцию в functions.php:
function mayak_cats_images(){
$ags = array(
'taxonomy'=>'category',
'parent' => get_query_var('cat'),
'meta_query' => array(array('key' => 'id-cat-images')),
);
$terms = get_terms($ags);
$count = count($terms);
if($count > 0){
echo '<div class="cat-thumbnail">';
foreach ($terms as $term) {
$image_id = get_term_meta($term->term_id, 'id-cat-images', true);
echo '<style>
.cat-thumbnail img { width: 100%; height: auto; }
</style>';
echo wp_get_attachment_image($image_id, 'large');
echo '<h3>
<a href="'.get_category_link($term->term_id).'">'
. $term->name .
'</a>
</h3>';
}
echo '</div>';
}
}
Теперь вы можете вывести сетку подкатегорий в любом месте шаблона:
<?php mayak_cats_images(); ?>

Хуки активации и инициализации в WordPress: Где и когда создавать таблицы
60
Select в HTML: скрытый placeholder, подсветка и динамический индикатор срочности
78
Как создать собственное меню в админке WordPress: простое руководство для новичков
85
Кастомизация страницы входа в WordPress: логотип, цвета, фоновая картинка и собственный CSS
122
Как изменить или полностью убрать текст в подвале (футере) админ-панели WordPress
98
Добавление мета-описания и ключевых слов в WordPress 519
Как обнаружить блокировщик рекламы на сайте с помощью JavaScript 204
Минимальная сумма заказа WooCommerce 181
Как добавить виджет для валют на панель администратора WordPress 155
Как добавить поле «Отдел» и ограничить видимость категорий в WordPress 151
Добавить комментарий