Каким образом можно добавить миниатюру к таксономии?

Как можно добавить возможность загрузки миниатюры для таксономии "Квартиры", чтобы она функционировала аналогично стандартным постам и страницам? Включение поддержки миниатюр осуществляется с помощью кода <pre><code class="php">add_theme_support('post-thumbnails');</code></pre>, но это работает только для стандартных постов и страниц.
  • 2 октября 2024 г. 7:24
Ответы на вопрос 1
Чтобы добавить миниатюры к таксономиям в WordPress, нужно использовать функцию `add_image_size()` для добавления новой поддержки изображения и затем использовать фильтр для активизации этой функции для необходимой таксономии. Например, если вы хотите добавить миниатюру к таксономии "Квартиры", вам потребуется выполнить следующие шаги:

1. **Добавьте поддержку миниатюр для таксономии**. Это можно сделать с помощью хука `init`:

```php
// Добавьте поддержку миниатюр для таксономий
function my_register_taxonomy() {
    register_taxonomy('apartments', 'post', array(
        'label' => 'Квартиры',
        'public' => true,
        'hierarchical' => true,
        // Другие параметры таксономии
    ));

    // Добавляем поддержку миниатюры для таксономии
    add_post_type_support('apartments', 'thumbnail');
}
add_action('init', 'my_register_taxonomy');
```

2. **Создайте мета-поле для загрузки миниатюры**. Для этого используйте функцию `add_action` с хуком `add_meta_boxes`:

```php
// Добавляем метабокс для загрузки изображений
function my_apartment_thumbnail_meta_box() {
    add_meta_box(
        'apartment_thumbnail',
        'Миниатюра квартиры',
        'render_apartment_thumbnail_meta_box',
        'apartments',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'my_apartment_thumbnail_meta_box');

function render_apartment_thumbnail_meta_box($term) {
    $thumbnail_id = get_term_meta($term->term_id, 'thumbnail_id', true);
    $thumbnail_url = wp_get_attachment_url($thumbnail_id);
    ?>
    <div class="thumbnail-wrap">
        <?php if ($thumbnail_url): ?>
            <img src="<?php echo esc_url($thumbnail_url); ?>" style="width: 100%; height: auto;" />
        <?php endif; ?>
        <input type="hidden" id="thumbnail_id" name="thumbnail_id" value="<?php echo esc_attr($thumbnail_id); ?>" />
        <button class="upload_image_button button">Загрузить миниатюру</button>
    </div>
    <script>
    jQuery(document).ready(function($){
        $('.upload_image_button').on('click', function(e) {
            e.preventDefault();
            var button = $(this);
            var custom_uploader = wp.media({
                title: 'Выберите изображение',
                button: {
                    text: 'Выбрать изображение'
                },
                multiple: false
            }).on('select', function() {
                var attachment = custom_uploader.state().get('selection').first().toJSON();
                $('#thumbnail_id').val(attachment.id);
                button.prev('img').attr('src', attachment.url).show();
            }).open();
        });
    });
    </script>
    <?php
}
```

3. **Сохраните миниатюру при сохранении таксономии**:

```php
function save_apartment_thumbnail($term_id) {
    if (isset($_POST['thumbnail_id'])) {
        $thumbnail_id = intval($_POST['thumbnail_id']);
        update_term_meta($term_id, 'thumbnail_id', $thumbnail_id);
    }
}
add_action('created_apartments', 'save_apartment_thumbnail');
add_action('edit_apartments', 'save_apartment_thumbnail');
```

Таким образом, вы добавите возможность загружать миниатюры для таксономии "Квартиры" в вашей теме WordPress. После этого вы сможете использовать загруженные миниатюры в своем шаблоне, обращаясь к мета-данным терминов.
Похожие вопросы