Вопрос или проблема
Я использовал этот код 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, что значительно улучшит общий пользовательский опыт.