Как удалить неиспользуемые изображения из вашей медиатеки в WordPress
Опубликовано: 2019-10-15Когда ваш веб-сайт работает какое-то время, это нормально, что есть вещи, которые больше не нужны, но все еще существуют. Одним из самых раздражающих примеров являются изображения, которые больше не используются, но продолжают занимать место в вашем WordPress.
Эти изображения, которые вы больше не используете в своих сообщениях или на страницах, или в любом другом типе контента, который устарел, остаются размещенными на вашем сервере, тратя впустую ресурсы и место для хранения. Лучшее, что вы можете с ними сделать, это устранить их, если вы не собираетесь их использовать снова. Но как их найти и убедиться, что они нигде не используются? Давай увидим это…
До начала
Первое, что нужно сделать, если вы хотите удалить изображения из вашего WordPress, которые больше не используются, — это сделать резервную копию вашего веб-сайта, включая медиафайлы в папке wp-content .
Хотя изображения, которые вы загружаете в медиатеку, хранятся в wp-content/uploads/ , возможно, что если вы используете плагин для загрузки файлов, они окажутся в другой папке. Следовательно, убедитесь, что у вас есть резервная копия базы данных WordPress и всех файлов в папке wp-content а не только wp-content/uploads .
После создания резервной копии мы можем продолжить следующие шаги…
Обнаружение потерянных изображений в WordPress
Существует несколько способов обнаружения изображений, которые больше не используются ни в каком контенте на вашем веб-сайте WordPress. Наиболее эффективным является поиск их в базе данных WordPress.
Для этого мы должны знать, что изображения, загруженные вами в медиатеку WordPress, хранятся в таблице wp_posts , как если бы они были записью или страницей. Что отличает их от другого содержимого, хранящегося в этой таблице, так это то, что они имеют значение вложения в столбце post_type .
Кстати, важное замечание: если у вас нет знаний о базах данных, вам лучше быть осторожным с тем, что вы делаете с этого момента, сохраняйте резервную копию базы данных и ознакомьтесь с этой статьей Кодекса WordPress, где они объясняют все в Подробнее.
Где были мы? Ах да: мы хотим найти все те изображения, которые не используются в вашем WordPress. Это легче определить, чем сделать, но не волнуйтесь, мы постараемся объяснить это шаг за шагом и простым способом.
Все, что нам нужно сделать, это написать запрос на языке SQL для запуска в базе данных WordPress MySQL. Если вы не знаете, как получить доступ к базе данных вашего веб-сайта, обратитесь к своему хостинг-провайдеру за инструкциями, как это сделать. Если они дают вам доступ к phpMyAdmin, это тоже нормально
Запрос, который вам нужно выполнить:
Давайте сломаем это.
Первое, что мы делаем, это начинаем с SELECT , чтобы выбрать все определенные строки определенной таблицы. В строке 2 звездочка означает, что нам нужны «все столбцы» в каждой строке.
Строки 3 и 4 указывают таблицы, которые нас интересуют. В этом случае мы хотим выбрать вложения WordPress, которые, как я уже сказал, хранятся в wp_posts , поэтому мы будем использовать эту таблицу.
Начиная со строки 5 WHERE позволяет нам добавлять условия для фильтрации нужных нам строк и исключения остальных. Каждое условие между строками 6 и 14 отделено инструкцией AND , которая указывает, что все условия должны быть выполнены одновременно. Если строка не соответствует всем условиям WHERE , она не будет возвращена в выходных данных запроса SELECT .
Первое условие в строке 6 определяет, что мы хотим получить только те строки, значением которых в столбце post_type является вложение . Как я уже говорил, записи и страницы также хранятся в таблице wp_posts , среди прочего контента. С этим условием мы получим только изображения.
Для каждого вложения WordPress сохраняет информацию о том, было ли оно загружено в контексте страницы или публикации, используя столбец post_parent . Следовательно, условие строки 8 заставляет нас получать только те вложения , у которых post_parent не существует (то есть они не привязаны ни к какой странице или сообщению).

С другой стороны, если мы выбираем изображение в качестве избранного изображения поста или страницы, WordPress создает строку метаданных в таблице wp_postmeta с ключом _thumbnail_id и в качестве значения устанавливает идентификатор изображения вложения . В строке 10 запроса мы получаем те изображения, идентификатор которых не фигурирует в качестве значения строки wp_postmeta для ключа _thumbnail_id .
Строка 12 определяет условие для фильтрации изображений, URL-адрес которых не отображается в содержимом сообщений или страниц. То есть, если URL-адрес изображения появляется в содержимом, мы предполагаем, что изображение все еще полезно и поэтому не должно быть удалено. Обратите внимание, что URL-адрес изображения отображается в столбце guid таблицы wp_posts .
Наконец, возможно, вы использовали какой-то плагин, который помещает URL-адреса изображений в строки таблицы wp_postmeta . Условие строки 14 позволяет нам обнаружить этот конкретный случай.
Вот и все! Выполнение этого SQL-запроса вернет все изображения, которые предположительно нигде на вашем сайте не используются.
Имейте в виду, что при поиске потерянных изображений могут быть ложные срабатывания. То есть изображения, которые помечены как неиспользуемые, но на самом деле используются в WordPress. Это связано с тем, что вы можете использовать плагины, которые определяют свои собственные таблицы и хранят там ссылки на ваши изображения. Если это ваш случай, вы должны адаптировать запрос, добавив дополнительные условия для покрытия этих случаев.
Удалить потерянные изображения в WordPress
Теперь, когда у нас есть изображения, которые потенциально не используются в WordPress, мы должны взглянуть на результаты и посмотреть, все ли изображения, которые мы перечислили, используются или нет. В зависимости от того, что мы находим, мы можем уточнить запрос, добавив дополнительные условия, как мы говорили ранее. Если все кажется правильным, можно двигаться дальше.
Для удаления вложения в WordPress у нас есть функция wp_delete_attachment , описание которой вы можете найти здесь. Если вы посмотрите на документацию, вы увидите, что эта функция получает идентификатор вложения и логический параметр, указывающий, хотите ли вы принудительно удалить или просто удалить его.
Когда вы вызываете эту функцию в WordPress, она удалит вложение и всю связанную с ним информацию, включая возможные комментарии, появление в таксономиях, связанные метаданные и, самое главное, файлы изображений, хранящиеся в папке wp-content .
Чтобы получить список инструкций wp_delete_attachment , которые мы будем использовать в PHP, нам просто нужно изменить строку 2 предыдущего запроса, чтобы запрос SELECT возвращал строку символов, которая создает нужную нам инструкцию. По одному для каждой строки, возвращаемой запросом. Вы можете увидеть результаты здесь:

Теперь вам просто нужно скопировать все эти инструкции и вставить их, например, в файл functions.php вашей темы и посетить ваш сайт. Это приведет к выполнению этих инструкций, удалив потерянные изображения из вашего WordPress. После этого удалите предыдущие вставленные инструкции, потому что они больше не понадобятся.
Не забудьте проверить, что ваш веб-сайт все еще работает идеально и что вы не удалили соответствующие изображения. Если что-то пошло не так, не волнуйтесь: у вас должна быть резервная копия вашей базы данных и папки wp-content , чтобы вы могли восстановить свой сайт до прежнего состояния.
Если у вас есть проблемы с SQL и базой данных, или вы ничего не поняли из того, что я здесь объяснил, сначала дайте мне знать, написав комментарий ниже. После этого попробуйте использовать плагин, например Media Cleaner. Конечный результат, который вы получите, должен быть очень похож на то, что мы видели в этом посте.
Избранное изображение Гэри Чана на Unsplash .
