我做得对吗?删除产品后删除图像。WooCommerce

时间:2017-11-23 作者:Zhi V

我使用Woocommerce RestAPI创建、更新和删除产品,特别是使用以下方法:

$woocommerce->post(\'products/batch\', $data);
使用此方法后,连接的图像将保留在服务器和数据库中。

因此,这是删除帖子(产品)后从数据库和服务器文件夹中删除连接图像的代码:

$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);
            }
        }
    }
这是正常的实现吗?您将如何编辑此代码?

1 个回复
SO网友: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 as $id ) wp_delete_attachment($id,true);
}
注:根据文件https://codex.wordpress.org/Function_Reference/wp_delete_attachment 将第二个参数设置为true以强制删除附件,否则它将变为垃圾箱。

结束

相关推荐

Images are not shown

我可以在媒体/图书馆中看到我的图片,但不能在帖子中看到。问题似乎是图像的真实url以图像结尾。jpg(如果我转到这个url,我可以看到图像)。但在帖子中,我看到了“断开的图像链接”图标。当我检查图像url时,它以图像sizeXsize结尾。jpg,所以Wordpress出于某种原因添加了sizeXsize(例如1000x1000)。如何解决此问题?编辑1:我刚刚安装了WP。我试过theams 2111和215,同样的问题。我已经安装了很多插件,请看一下。Edit2:我已经停用了所有插件,仍然是同一个问题。