Вопрос или проблема
Это мой первый вопрос, так что простите меня, если он не идеален 😅
Я спрашиваю, есть ли способ полностью отключить и удалить функциональность миниатюр из WordPress. (Я использую плагин CDN для изображений, который заботится о изменении размера, оптимизации и т.д. Так что нет необходимости в лишнем размере и количестве файлов от миниатюр)
Я уже знаю, как предотвратить генерацию миниатюр в WordPress, пока все хорошо.
Я также знаю, как удалить все миниатюры (из файловой системы).
Но делать это в моей тестовой среде привело к двум очевидным проблемам, о которых я забыл.
Чтобы предотвратить эти проблемы, мне нужны функции, которые:
Удаляют всю информацию о миниатюрах из базы данных WordPress (наверное, postmeta?)
“Заменяют” параметры размера изображения для всех изображений, используемых в записях блога или страницах, на “Полный размер”
“Заменяют” миниатюры, используемые в медиатеке, на изображения полного размера (так как я хочу удалить все миниатюры)
Заранее спасибо
Чтобы удалить все лишние размеры изображений, используйте get_intermediate_image_sizes()
в паре с remove_image_size()
. Например:
function remove_extra_image_sizes() {
array_map( 'remove_image_size', get_intermediate_image_sizes() );
}
add_action('init', 'remove_extra_image_sizes');
Чтобы отредактировать выпадающий список размеров изображений, вы можете привязать свою функцию к image_size_names_choose
фильтру.
function filter_image_size_names_choose($size_names) {
return array_filter( $size_names, function( $size_name ){
return 'full' === $size_name;
}, ARRAY_FILTER_USE_KEY );
}
add_filter('image_size_names_choose', 'filter_image_size_names_choose');
Затем используйте плагин миниатюр для “регенации” миниатюр. Поскольку размеры отключены, плагин должен (в теории) просто очистить все существующие файлы миниатюр и данные, оставив вам только изображения полного размера.
Ответ или решение
Конечно, чтобы полностью отключить и удалить функциональность миниатюр в WordPress, следует выполнить несколько шагов, включая удаления данных из базы данных, обновления ссылок на изображения в контенте и для медиа-библиотеки. Ниже представлены подробные инструкции, которые помогут вам решить эту задачу.
1. Отключение генерации миниатюр
Сначала необходимо предотвратить создание миниатюр для новых загружаемых изображений. Это делается с помощью хука init
, который позволяет вам удалить все промежуточные размеры изображений (миниатюры) из системы.
function remove_extra_image_sizes() {
array_map('remove_image_size', get_intermediate_image_sizes());
}
add_action('init', 'remove_extra_image_sizes');
Этот код отключает все размеры изображений, кроме оригинального (полного) размера.
2. Очистка старых миниатюр из базы данных
Теперь, когда генерация миниатюр отключена, необходимо очистить данные миниатюр из базы данных. Скорее всего, информация о миниатюрах хранится в таблице wp_postmeta
. Чтобы удалить все записи, связанные с миниатюрами, вы можете использовать следующий SQL-запрос в phpMyAdmin или другой базе данных MySQL:
DELETE FROM wp_postmeta WHERE meta_key LIKE '_wp_attachment_metadata';
Важно: Рекомендую создать резервную копию базы данных перед выполнением запросов, чтобы предотвратить потерю данных.
3. Обновление ссылок на изображения в контенте
Для обновления размеров изображений в постах и страницах необходимо заменить миниатюры на их полные версии. Для этого можно использовать следующую функцию, которая будет перебором всех записей в таблице wp_posts
обновлять их содержимое:
function replace_thumbnail_with_full_image() {
global $wpdb;
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type IN ('post', 'page')");
foreach ($posts as $post) {
$updated_content = preg_replace('/wp-image-(\d+)/', 'attachment_id="1"', $post->post_content); // Измените логику в зависимости от необходимости
$wpdb->update(
$wpdb->posts,
['post_content' => $updated_content],
['ID' => $post->ID]
);
}
}
add_action('init', 'replace_thumbnail_with_full_image');
4. Обновление медиа-библиотеки
Чтобы заменить миниатюры в медиа-библиотеке на полные размеры изображений, вы можете использовать указанную ранее функцию для очистки метаданных в wp_postmeta
. Но также необходимо обновить отображение в админке:
function filter_image_size_names_choose($size_names) {
return ['full' => 'Полный размер'];
}
add_filter('image_size_names_choose', 'filter_image_size_names_choose');
5. Перегенерация миниатюр
Используйте плагин для регенерации миниатюр, например, "Regenerate Thumbnails". Так как все размеры были отключены, плагин должен удалить все существующие миниатюры и оставить только оригиналы.
Заключение
С помощью вышеперечисленных шагов вы сможете полностью отключить и удалить функциональность миниатюр в WordPress, сохранив при этом полные размеры изображений для использования. Самое главное — всегда делать резервные копии данных перед выполнением каких-либо изменений в коде или базе данных.
Если у вас возникнут какие-либо вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.