کنترل حجم تصاویر قبل از آپلود در رسانه وردپرس(بدون نصب افزونه)

شکی نیست که تصاویر نقش بسیار مهمی در زیباسازی صفحات وب بازی می کنند، اما همین تصاویر اگر به درستی استفاده نشوند مثل یک چاقوی دو لبه خطرناک خواهند بود. تصاویر حجیم و مدیریت نشده علاوه بر مصرف پهنای باند، سرعت وب سایت تان را کاهش داده و موجب نارضایتی کاربران تان خواهد شد.

برای بررسی این موضوع صفحه وب یکی از سایت های خارجی که از تصاویر حجیم استفاه کرده است را به کمک ابزار GTMetrix بررسی کردیم.

ابزار تست سرعت gtmetrix

نتیجه وحشتناک است، صفحه ای با حجم تقریبی ۲۱ مگابایت!! حال اگر ۴ صفحه وب مشابه مورد فوق در این وب سایت وجود داشته باشد، شما در نقش یک بازدیدکننده چیزی در حدود ۸۵ مگابایت از اینترنت تان را مصرف خواهید کرد. اگر می خواهید کاربران تان به این بلا دچار نشوند حجم تصاویر وب سایت تان را با روش های زیر کاهش دهید:

  1. نرم افزار های گرافیکی مثل فتوشاپ
  2. ابزارهای آنلاین فشرده سازی تصاویر مثل Compress JPEG
  3. افزونه های وردپرسی مثل WP Smush

اما روش های فوق در بعضی مواقع پاسخگو نیستند:

  1. وب سایت تان چندین نویسنده دارد که هر کدام ساز خودشان را می زنند.
  2. مشتریان یا کارفرمایانی که نمی داند فشرده سازی چیست و هر تصویری دم دستشان برسد آپلود می کنند.

در چنین مواقعی راه حل بسیار ساده ولی سختگیرانه است، اعمال محدودیت!

بهتر است در همین ابتدای کار جلوی اشتباه را بگیرید و یک حجم حداکثری برای تصاویرتان مشخص کنید، برای اینکار کد زیر را در فایل functions.php قرار دهید.

در مثال فوق حداکثر اندازه مجاز تصویر ۲۰۰ کیلوبایت در نظر گرفته شده است.

function set_maximum_image_size( $file ) {
    $size = $file['size'] / 1024;
    $is_image = strpos( $file['type'], 'image' ) !== false;
    $limit = 200;
    if ( $is_image && $size > $limit ) {
        $file['error'] ="اندازه تصاویر باید کمتر از $limit کیلوبایت باشد!";
    }
    return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'set_maximum_image_size' );

 

فیلتر wp_handle_upload_prefilter باعث خواهد شد که تابع set_maximum_image_size درست قبل از اینکه هر گونه فایلی در رسانه وردپرس ذخیره شود اجرا گردد. نتیجه را در تصویر زیر مشاهده می کنید، وردپرس مانع آپلود تصویر ۷۰۰ کیلوبایتی شده است.

مدیریت رسانه در وردپرس

 

توجه داشته باشید که محدودیت آپلود برای همه کاربران حتی مدیران وب سایت در نظر گرفته خواهد شد، اگر می خواهید کاربران نقش مدیریتی را از این قضیه مستثنی نمائید از کد زیر استفاده کنید.

function set_maximum_image_size( $file ) {
    if ( !current_user_can( 'administrator' ) ) {
        $size = $file['size'] / 1024;
        $is_image = strpos( $file['type'], 'image' ) !== false;
        $limit = 200;
        if ( $is_image && $size > $limit ) {
            $file['error'] ="اندازه تصاویر باید کمتر از $limit کیلوبایت باشد!";
        }
    }
    return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'set_maximum_image_size' );

 

نظرات و سوالات کاربران
  1. سلام وقت بخیر
    کد محدود کردن حجم آپلود برای تمام کاربران اعمال میشه و کاملا درست کار میکنه اما کد مربوط به استثنا کردن مدیریت کار نمیکنه و محدودیت حجم آپلود برای مدیریت هم اعمال میشه!
    ممنون میشم اگه راهنمایی بفرمایید

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *