Вопрос: Я правильно сделал? Удаление изображений после удаления товара. WooCommerce

Я создаю, обновляю и удаляю продукты, используя RestooI Woocommerce, в частности, этот метод:

$woocommerce->post('products/batch', $data);

После этого метода связанные изображения остаются на сервере. и db.

Итак, это код, который удаляет подключенные изображения из базы данных и папки сервера после удаления сообщения (продукта):

$this->woocommerce->post('products/batch', $data);$this->deleteImages($data['delete']); //[ $key => $id_post ]private function deleteImages($productIds)    {        foreach ( $productIds as $productId ) {            $args = [                //'numberposts' => 2,                'order' => 'ASC',                'post_mime_type' => 'image',                'post_parent' => (int) $productId,                'post_status' => 'inherit',                'post_type' => 'attachment',            ];            $child = get_children($args);            foreach ($child as $id => $item) {                $pathImg = str_replace(get_site_url(), ABSPATH, $item->guid);                $pathParts = pathinfo($pathImg);                $extension =  end(explode(".", $pathImg));                $imgWithoutExtension = $pathParts['dirname'] . '/' . basename($pathParts['basename'], '.' . $extension);                array_map('unlink', glob($imgWithoutExtension . '*')); //ex:[img.jpg, img1x1.jpg, img5x5.jpg, img.gif]                wp_delete_post($id);            }        }    }

Это нормальная реализация? Как бы вы отредактировали этот код?

<

Ответы и комментарии:

wp_delete_attachment ($ id, true) удаляет файлы с сервера?
Создан 24-11-2017 02:00 Zhi V

Да, а также автоматически сгенерированные эскизы. Не забудьте использовать «true» для второго параметра.
Создан 24-11-2017 02:18 Lars Koudal

Спасибо, я просто заново изобрел weel. Но без подключения к БД это выглядит лучше. Просто $ child_atts = get_children ($ args)
Создан 24-11-2017 03:20 Zhi V

С удовольствием :-)
Создан 25-11-2017 04:47 Lars Koudal

Глядя на ответ @obmerks на https://stackoverflow.com/questions/12997698/delete-images-after-post, вы можете упростить его с помощью этого:
foreach ($ productIds as $ productId) {
  $ child_atts = $ wpdb-> get_col ("SELECT ID FROM {$ wpdb-> posts} WHERE post_parent = $ productId AND post_type = 'attachment'");
  foreach ($ child_atts как $ id) wp_delete_attachment ($ id, true);
}

Примечание: согласно документации https://codex.wordpress.org/Function_Reference/wp_delete_attachment установите для второго параметра значение true, чтобы принудительно удалить вложение, в противном случае оно отправляется в корзину.
Создан 24-11-2017 02:04 Lars Koudal33628