Отображать размеры изображений в медиатеке и сделать их сортируемыми.

Вопрос или проблема

Я использовал этот код https://wordpress.stackexchange.com/a/296517/254438 для добавления размеров изображений в медиабиблиотеку.

Как мне добавить сортировку размеров изображений? Я знаю, что есть плагины, но я не хочу использовать никакой плагин.

Ответ или решение

Для добавления размеров изображений в медиабиблиотеку WordPress и их сортировки без использования плагинов, необходимо немного модифицировать код, который вы уже использовали. Начнем с введения в контекст.

Шаг 1: Отображение размеров изображений

Как вы упомянули, для отображения размеров изображений в медиабиблиотеке вы можете использовать код, предложенный по ссылке. При добавлении нового столбца в таблицу медиабиблиотеки, вы сможете увидеть размеры изображений, загруженных на сайт. Пример кода для этой задачи может выглядеть следующим образом:

add_filter('manage_media_columns', 'add_image_size_column');
function add_image_size_column($columns) {
    $columns['image_size'] = __('Размеры', 'text_domain'); // Добавление нового столбца
    return $columns;
}

add_action('manage_media_custom_column', 'render_image_size_column', 10, 2);
function render_image_size_column($column_name, $id) {
    if ($column_name === 'image_size') {
        $img_meta = wp_get_attachment_metadata($id);
        if (isset($img_meta['width']) && isset($img_meta['height'])) {
            echo esc_html($img_meta['width'] . 'x' . $img_meta['height']);
        }
    }
}

Шаг 2: Сортировка изображений по размерам

Для реализации сортировки по размерам нам необходимо добавить возможность сортировки в медиабиблиотеке. Это потребует внесения изменений в функцию сортировки, которую мы можем использовать в WordPress. Вот пример реализации:

add_filter('manage_edit-upload_sortable_columns', 'sortable_image_size_column');
function sortable_image_size_column($columns) {
    $columns['image_size'] = 'image_size'; // Указываем, что наш столбец сортируемый
    return $columns;
}

add_action('pre_get_posts', 'sort_image_size_column');
function sort_image_size_column($query) {
    if (is_admin() && $query->query['post_type'] === 'attachment') {
        if (isset($_GET['orderby']) && $_GET['orderby'] === 'image_size') {
            $query->set('meta_key', 'image_size');
            $query->set('orderby', 'meta_value_num');
        }
    }
}

Шаг 3: Извлечение размеров изображений в мета-данные

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

add_action('add_attachment', 'save_image_size_meta');
function save_image_size_meta($id) {
    $img_meta = wp_get_attachment_metadata($id);
    update_post_meta($id, 'image_size', $img_meta['width'] * $img_meta['height']); // Сохраняем размер как метаданные
}

Заключение

После выполнения всех шагов, в вашей медиабиблиотеке появится новый столбец с размерами изображений, который будет отсортирован по значениям (ширина x высота) изображений. Этот код полностью реализует необходимую функциональность без использования сторонних плагинов.

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

С помощью этих шагов ваши пользователи получат более удобный интерфейс для работы с изображениями в медиабиблиотеке WordPress, что значительно улучшит общий пользовательский опыт.

Оцените материал
Добавить комментарий

Капча загружается...