商城首页欢迎来到中国正版软件门户

您的位置:首页 >WordPress 图片尺寸限制排除方法

WordPress 图片尺寸限制排除方法

  发布于2026-04-21 阅读(0)

扫一扫,手机访问

WordPress 图片上传尺寸限制:如何为特定页面排除验证规则

本文教你如何在 WordPress 中为供应商用户设置图片上传尺寸限制,并灵活排除特定页面(如店铺首页、Logo 上传页),避免误拦合规图片。通过条件判断结合 wp_handle_upload_prefilter 钩子,实现精准控制。

本文教你如何在 WordPress 中为供应商用户设置图片上传尺寸限制,并灵活排除特定页面(如店铺首页、Logo 上传页),避免误拦合规图片。通过条件判断结合 `wp_handle_upload_prefilter` 钩子,实现精准控制。

在使用 WCMP(WooCommerce Multi-Vendor Marketplace)等多供应商插件时,常需对供应商上传的图片施加尺寸约束——例如强制主图不低于 1080×1080 像素,同时防止超大图(如超过 12000×12000)影响性能。但若全局启用该限制,会误伤「店铺 Logo」「横幅 Banner」等本应允许小尺寸上传的场景。

因此,关键在于动态判断当前上传上下文:仅在非白名单页面(如商品编辑页、店铺设置页)生效校验,而在 wcmp_before_shop_front 触发的店铺首页、或特定页面(如 ID=24 的 Logo 上传页)中跳过验证。

以下是优化后的完整解决方案(推荐写入主题的 functions.php 或专用插件):

function wcmp_vendor_image_resolution_check($file) {
    // 1. 仅对 WCMP 供应商用户执行检查
    if (!is_user_wcmp_vendor(get_current_user_id())) {
        return $file;
    }

    // 2. 【核心】排除特定页面:根据实际需求任选其一(取消注释并配置)

    // ✅ 方案 A:排除指定页面 ID(如 Logo/Banner 上传页 ID = 24)
    // if (is_page(24)) {
    //     return $file;
    // }

    // ✅ 方案 B:排除特定页面模板(如 custom-banner-upload.php)
    // if (is_page_template('custom-banner-upload.php')) {
    //     return $file;
    // }

    // ✅ 方案 C:排除 WCMP 店铺首页(推荐 —— 基于问题中提供的钩子语义)
    // 注意:wp_handle_upload_prefilter 在前端上传时触发,此时无法直接用 do_action,
    // 但我们可通过检测当前请求是否处于店铺前台来间接判断
    if (function_exists('wcmp_is_store_page') && wcmp_is_store_page()) {
        return $file;
    }

    // ✅ 方案 D:更通用的 URL 路径判断(适用于无函数支持的环境)
    // $current_url = esc_url_raw($_SERVER['REQUEST_URI']);
    // if (strpos($current_url, '/vendor-dashboard/') !== false || 
    //     strpos($current_url, '/store/') !== false) {
    //     return $file;
    // }

    // 3. 执行尺寸校验
    $image_info = getimagesize($file['tmp_name']);
    if (!$image_info) {
        return $file; // 非图片文件,跳过校验
    }

    $width  = $image_info[0];
    $height = $image_info[1];

    $min = ['width' => 1080, 'height' => 1080];
    $max = ['width' => 12000, 'height' => 12000];

    $too_small = '图片尺寸过小,请上传宽度和高度均不小于 1080 像素的图片。';
    $too_large = '图片尺寸过大,请上传宽度和高度均不超过 12000 像素的图片。';

    if ($width < $min['width'] || $height < $min['height']) {
        $file['error'] = $too_small;
        return $file;
    }

    if ($width > $max['width'] || $height > $max['height']) {
        $file['error'] = $too_large;
        return $file;
    }

    return $file;
}
add_filter('wp_handle_upload_prefilter', 'wcmp_vendor_image_resolution_check');

⚠️ 注意事项与最佳实践:

  • 勿嵌套函数定义:原始答案中将整个函数包裹在 if 内是错误写法(PHP 不允许条件式函数声明),正确做法是在钩子回调内部做逻辑分支。
  • 优先使用语义化判断:wcmp_is_store_page() 是 WCMP 提供的可靠函数,比依赖 URL 或页面 ID 更健壮;若不存在,可配合 is_admin() 判断后台/前台环境。
  • 错误提示本地化:示例中使用中文提示,如需多语言支持,建议改用 __() 函数包裹字符串。
  • 性能考虑:getimagesize() 会读取文件头,开销较小,但避免在非图片文件上重复调用(已通过 $image_info 检查规避)。
  • 测试覆盖:务必在供应商账户下分别测试「商品图上传」「店铺 Logo 上传」「Banner 上传」及「后台媒体库上传」,确认规则按预期生效或跳过。

通过以上结构化实现,你既能保障平台内容质量,又赋予供应商在必要场景下的操作灵活性,真正实现“有约束的自由”。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注