Если вы пользуетесь вопрдпрессом, то замечали что при удалении поста картинки прикрепленную к посту не удаляются. Это не проблема если этот Вордпресс используется для ведения вашего личного блога. Тогда и посты то вы редко удаляете. А вот если блог наполняется пользовательским контентом, то эта фишка вордпресса реально проблема.
Если пользовательского контента много и в нем много тяжелых картинок и значительная часть этого контента уходит в корзину, то если не удалять картинки, то WordPress начинает пухнуть как на дрожжах и занимать место на сервере.
Мне вообще не понятно, почему разработчики вордпресса не сделали отдельную кнопочку для удаления поста вместе с вложениями. Или галочку где-нибудь в настройках. Но это недоразумение очень легко поправить.
Нужно в файл functions.php вашей темы добавить такой код?
1 2 3 4 5 6 7 8 |
add_action( 'before_delete_post', 'azzrael_delete_attaches' ); function azzrael_delete_attaches($pid){ if(isset($pid) && $pid > 0 && current_user_can('edit_post', $pid)){ foreach( get_attached_media( 'image', $pid ) as $i ){ if(wp_delete_attachment( $i->ID, true )) {} // can log } } } |
Обратите внимание, что WordPress по умолчанию записи не удаляет, а помещает в корзину. В этом случае с помощью кода выше картинки будут удаляться только тогда, когда пост будет удален и из корзины. А когда пост перемещен в корзину — картинки не удаляются. И это разумное поведение. Ведь в корзину пост помещают чтобы при необходимости восстановить его, а если мы удалим вложения, то и какой смысл восстанавливать пост с битыми картинками. Однако, если хочется удалять вложения сразу при перемещении поста в корзину, то просто замените before_delete_post на wp_trash_post
.
Код проверен на ВП > 3.9. Он удаляет только вложенные к посту картинки. Картинки вставленные в пост иначе он не трогает.