WordPress仅编辑商品页生效的图片尺寸限制代码失效排查
问题原因
原有实现存在三个核心问题,导致规则全局生效、错误提示无法正常展示:
- 分支返回值缺失:所有校验逻辑均包裹在条件判断块内,不满足判断条件时函数未返回
$file对象,WordPress会默认判定上传失败,直接拦截所有非匹配场景的上传请求。 - 页面判断逻辑失效:WCMp商品编辑页的图片上传走异步接口,请求地址为
async-upload.php或admin-ajax.php,路径本身不包含edit-product字段,仅靠$_SERVER['REQUEST_URI']无法匹配前端编辑商品页的上传场景,范围判断规则完全失效。 - 兼容逻辑缺失:未处理非图片文件、图片信息读取失败的边界场景,且代码中
&&为HTML转义后的与运算符,直接复制使用会触发PHP语法错误,导致上传流程中断,错误提示无法透传到前端。
修复代码
将以下代码替换原有代码,放入主题functions.php或自定义功能插件中即可:
add_filter('wp_handle_upload_prefilter', 'wcmp_vendor_product_image_size_limit'); function wcmp_vendor_product_image_size_limit($file) { // 非WCMp供应商直接放行 if (!function_exists('is_user_wcmp_vendor') || !is_user_wcmp_vendor(get_current_user_id())) { return $file; } // 匹配编辑商品页场景:兼容直接访问页面、异步上传两种情况 $is_edit_product_page = false; // 校验当前是否直接访问WCMp编辑商品页 if (function_exists('wcmp_is_page') && wcmp_is_page('edit-product')) { $is_edit_product_page = true; } // 校验异步上传的来源页是否为WCMp编辑商品页,排除后台上传请求 $referer = wp_get_raw_referer(); if ($referer && strpos($referer, 'edit-product') !== false && strpos($referer, 'wp-admin') === false) { $is_edit_product_page = true; } // 非目标页面直接放行 if (!$is_edit_product_page) { return $file; } // 仅对图片类型文件做尺寸校验 $file_type = wp_check_filetype($file['name']); $allowed_image_ext = array('jpg', 'jpeg', 'png', 'webp', 'gif'); if (!in_array(strtolower($file_type['ext']), $allowed_image_ext)) { return $file; } // 读取图片尺寸,读取失败直接返回错误 $image_info = @getimagesize($file['tmp_name']); if (!$image_info) { $file['error'] = '无法识别图片尺寸,请更换有效图片文件后重试'; return $file; } // 尺寸阈值配置,可根据需求修改 $min_size = array( 'width' => 1080, 'height' => 1080 ); $max_size = array( 'width' => 12000, 'height' => 12000 ); list($img_width, $img_height) = $image_info; // 校验尺寸规则 if ($img_width < $min_size['width'] || $img_height < $min_size['height']) { $file['error'] = sprintf('图片尺寸不符合要求,最小宽高需为 %d×%d 像素', $min_size['width'], $min_size['height']); } elseif ($img_width > $max_size['width'] || $img_height > $max_size['height']) { $file['error'] = sprintf('图片尺寸不符合要求,最大宽高不得超过 %d×%d 像素', $max_size['width'], $max_size['height']); } return $file; }
说明
- 规则仅对WCMp供应商在前端商品编辑页的上传行为生效,不会影响管理员后台上传、供应商在其他页面(如头像上传、店铺封面上传)的上传操作。
- 可直接修改代码中
$min_size、$max_size数组的数值调整尺寸限制,错误提示会直接在WordPress原生上传组件中展示,无需额外开发前端逻辑。 - 若需要支持其他图片格式,直接在
$allowed_image_ext数组中添加对应后缀即可。
内容的提问来源于stack exchange,提问作者timkerrem
相关产品推荐
相关产品推荐

