You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在删除WooCommerce产品图片时同步删除文件系统中的图片

WooCommerce产品编辑时删除图片同步永久删除媒体库文件

问题背景

  • 店铺通过外部API导入产品,部分产品包含大量图片,需手动进入产品编辑页面删除多余图片
  • 已实现删除产品时同步删除关联图片,但存在漏洞:例如某产品初始有15张图片,删除5张后上架半年再删除产品,仅剩下的10张图片会被删除,长期积累大量无用图片

需求目标

在WooCommerce产品页面通过图片旁的叉号删除图片时,同时将其从媒体库和服务器文件系统中永久删除

实现过程

曾尝试使用save_post、woocommerce_update_product、post_updated钩子,计划通过对比更新前后的产品图片ID数组,用array_diff()找出需删除的图片ID,再调用wp_delete_attachment($delete, $force_delete = true)删除,但无法获取更新前后的两组值。

后来发现woocommerce_update_product钩子会执行两次,于是借助全局变量存储前后值,最终实现可行代码:

add_action( 'woocommerce_update_product', 'action_save_product_data', 10, 2);
function action_save_product_data( $post_id, $product ) {
     
    // 指定仅在产品类型下执行
    if ( 'product' == get_post_type() )   {
        global $previous_product_id;
        global $before;
        
        if($previous_product_id === $post_id) {
            $after = wc_get_product( $post_id )->gallery_image_ids;   
        }

        if($previous_product_id !== $post_id) {
            $before = wc_get_product( $post_id )->gallery_image_ids;
        }

        if($previous_product_id === $post_id) {
            $images_to_be_deleted = array_diff($before, $after);
            foreach($images_to_be_deleted as $delete) {
                wp_delete_attachment( $delete, $force_delete = true );
            }
        }
        $previous_product_id = $post_id;
    }
}

内容的提问来源于stack exchange,提问作者Michael Bragt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:26:04