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

如何实现WordPress WooCommerce保存商品后异步生成缩略图?

解决WooCommerce商品缩略图生成耗时过长的异步处理方案

我有一个基于WordPress搭建的WooCommerce站点,每个商品需上传10-15张原始图片,单张大小为1-2MB,该尺寸符合站点所属行业需求。但每次创建商品时,图片上传后自动生成缩略图的过程耗时超60秒,等待时间过长,严重影响操作效率。

我计划禁用自动缩略图生成,改为在商品保存后通过后台异步任务执行缩略图再生操作,无需等待生成完成即可继续其他操作。我编写了相关代码,但首次测试时无法运行,后续通过在回调函数中添加指定文件引用解决了问题。

初始代码

// 安排文章保存后生成缩略图
function schedule_thumbnail_generation($post_id) {
    // 设置延迟时间(此处为5秒)
    $delay_seconds = 5;

    // 计算未来执行缩略图生成事件的时间戳
    $timestamp = time() + $delay_seconds;

    // 使用WP-Cron安排单次事件
    wp_schedule_single_event($timestamp, 'generate_thumbnail_event', array($post_id));
}

add_action('save_post', 'schedule_thumbnail_generation');

// 禁用自动缩略图生成
add_filter('intermediate_image_sizes_advanced', 'disable_thumbnail_generation');

function disable_thumbnail_generation($sizes) {
    return array();
}

// 缩略图生成回调函数
function generate_thumbnail_callback($post_id) {
    // 获取文章的所有附件
    $attachments = get_posts(array(
        'post_type' => 'attachment',
        'posts_per_page' => -1,
        'post_parent' => $post_id,
    ));

    // 遍历附件并生成缩略图
    foreach ($attachments as $attachment) {
        $attachment_id = $attachment->ID;

        // 为附件生成缩略图
        $attachment_metadata = wp_generate_attachment_metadata($attachment_id, get_attached_file($attachment_id));

        // 更新附件元数据,写入新生成的缩略图信息
        wp_update_attachment_metadata($attachment_id, $attachment_metadata);
    }
}

add_action('generate_thumbnail_event', 'generate_thumbnail_callback');

问题解决:添加必要的文件引用

在generate_thumbnail_callback函数开头添加以下代码后,问题得以解决:

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

修正后的完整回调函数如下:

// 缩略图生成回调函数
function generate_thumbnail_callback($post_id) {
    // 引入必要的WordPress后台文件
    require_once(ABSPATH . 'wp-admin/includes/media.php');
    require_once(ABSPATH . 'wp-admin/includes/file.php');
    require_once(ABSPATH . 'wp-admin/includes/image.php');

    // 获取文章的所有附件
    $attachments = get_posts(array(
        'post_type' => 'attachment',
        'posts_per_page' => -1,
        'post_parent' => $post_id,
    ));

    // 遍历附件并生成缩略图
    foreach ($attachments as $attachment) {
        $attachment_id = $attachment->ID;

        // 为附件生成缩略图
        $attachment_metadata = wp_generate_attachment_metadata($attachment_id, get_attached_file($attachment_id));

        // 更新附件元数据,写入新生成的缩略图信息
        wp_update_attachment_metadata($attachment_id, $attachment_metadata);
    }
}

add_action('generate_thumbnail_event', 'generate_thumbnail_callback');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:21:28