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

WordPress自定义头像上传器仅生成指定图片尺寸的代码问题排查

问题分析与修复方案

你的代码犯了两个关键错误

  1. 逻辑完全搞反了:你要的是保留avatar_scale_32x32和avatar_scale_96x96,但代码里却在检测到头像上传时删掉这俩尺寸,反而留着其他所有尺寸,这直接和需求背道而驰。
  2. 直接用$_FILES不靠谱:intermediate_image_sizes过滤器触发时,WordPress可能已经处理完文件上传,$_FILES不一定还能准确反映当前上传的来源,导致判断失效。

修正后的代码实现

第一步:先标记头像上传请求

在文件上传的早期阶段,先判断是不是头像上传器的请求,给当前请求打个标记:

function mark_avatar_upload( $file ) {
    // 识别头像上传器的请求(适配WP User Avatar的默认action)
    if ( isset( $_POST['action'] ) && $_POST['action'] === 'wpua_upload' || isset( $_FILES['wpua-file'] ) ) {
        add_filter( 'intermediate_image_sizes', 'filter_avatar_image_sizes' );
    }
    return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'mark_avatar_upload' );

第二步:过滤头像上传的生成尺寸

只保留你需要的两个尺寸,删掉其他所有尺寸:

function filter_avatar_image_sizes( $sizes ) {
    $allowed_sizes = ['avatar_scale_32x32', 'avatar_scale_96x96'];
    foreach ( $sizes as $index => $size ) {
        // 只保留允许的尺寸,其他全部删除
        if ( !in_array( $size, $allowed_sizes ) ) {
            unset( $sizes[$index] );
        }
    }
    return $sizes;
}

这样改的原因

  • 用wp_handle_upload_prefilter钩子在上传早期检测请求,能准确识别头像上传场景,避免上下文丢失的问题。
  • 逻辑彻底反转:从删除目标尺寸变成保留目标尺寸、删除其他尺寸,完全匹配你的需求——头像上传仅生成指定缩略图+原图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:18