
本文介绍如何仅在 woocommerce 多供应商插件(wcmp)的“编辑商品”页面对供应商上传的图片实施宽高限制,避免误触发全局校验,并修复原始代码中的逻辑错误与返回缺失问题。
本文介绍如何仅在 woocommerce 多供应商插件(wcmp)的“编辑商品”页面对供应商上传的图片实施宽高限制,避免误触发全局校验,并修复原始代码中的逻辑错误与返回缺失问题。
在 WordPress + WCMp 环境下,为保障商品图质量,常需对供应商上传的图片施加尺寸约束(如最小 1080×1080,最大 12000×12000)。但关键挑战在于:该限制必须严格限定于「编辑商品」页面(/edit-product/),不可影响媒体库上传、头像设置或其他后台页面。原始代码存在三处核心缺陷:
- 逻辑判断错误:$image_width <= $minimum['width'] || $image_height >= $minimum['height'] 混淆了大小比较方向(应为 && 且全部用 <);
- 缺少默认返回:未在条件外 return $file,导致非目标页面也中断上传流程;
- URI 匹配脆弱:仅依赖 strpos(REQUEST_URI, 'edit-product'),易受 URL 参数或子路径干扰(如 /product/edit-product/?id=123)。
以下是优化后的完整解决方案,兼顾健壮性与可维护性:
安全的随机密码生成器。支持自定义长度、字符类型(大写/小写字母、数字、特殊符号),排除相似字符,批量生成。纯 Python 标准库,无需 API 密钥。
function resize_image_resolution( $file ) {
// 仅对已登录的 WCMp 供应商 & 当前请求为编辑商品页生效
if (
is_user_wcmp_vendor( get_current_user_id() ) &&
isset( $_SERVER['REQUEST_URI'] )
) {
$request_uri = esc_url_raw( $_SERVER['REQUEST_URI'] );
// 使用正则精确匹配 /edit-product/ 路径(支持带参数、末尾斜杠等常见变体)
if ( preg_match( '#/edit-product(/|\?|&|#|$)#i', $request_uri ) ) {
// 尝试获取图片尺寸(跳过非图像文件)
if ( ! empty( $file['tmp_name'] ) && function_exists( 'getimagesize' ) ) {
$image_info = @getimagesize( $file['tmp_name'] );
if ( $image_info === false ) {
return $file; // 非图像文件,不校验
}
$width = $image_info[0];
$height = $image_info[1];
$min_width = 1080;
$min_height = 1080;
$max_width = 12000;
$max_height = 12000;
// 严格校验:宽度和高度均需 ≥ 最小值,且均 ≤ 最大值
if ( $width < $min_width || $height < $min_height ) {
$file['error'] = '图片尺寸过小:请上传宽度与高度均不低于 1080 像素的图片。';
} elseif ( $width > $max_width || $height > $max_height ) {
$file['error'] = '图片尺寸过大:请上传宽度与高度均不超过 12000 像素的图片。';
}
// 若无错误,$file 保持原样,无需显式 return
}
}
}
return $file; // ✅ 关键:所有分支最终统一返回 $file
}
add_filter( 'wp_handle_upload_prefilter', 'resize_image_resolution' );注意事项与增强建议:
- ✅ 安全兜底:使用 @getimagesize() 抑制警告,并检查返回值是否为 false,避免对 PDF、SVG 等非图像文件报错;
- ✅ 路径匹配升级:preg_match 替代 strpos,精准识别 /edit-product/、/edit-product?id=1、/vendor/edit-product/ 等真实场景;
- ✅ 错误提示本地化:消息使用中文并明确说明“宽度与高度均需满足”,减少用户困惑;
- ⚠️ 性能提示:getimagesize() 会读取文件头,对超大文件可能轻微延迟,生产环境可考虑结合 fileinfo 扩展预判 MIME 类型;
- ? 调试技巧:临时添加 error_log("URI: {$request_uri} | Match: " . (int) $is_edit_page); 辅助验证路径匹配逻辑。
此方案确保限制精准作用于目标页面,同时保持代码健壮、可读与可扩展,是 WCMp 供应商图片管控的推荐实践。

















