غیرفعال کردن تصاویر scaled در وردپرس با big_image_size_threshold
تصاویر تار وردپرس را با بالا بردن یا حذف سقف ۲۵۶۰ پیکسل و فیلتر big_image_size_threshold درست کنید، و ببینید چرا آپلود دوباره همان مرحلهای است که همه از قلم میاندازند
منتشرشده
یک فیلتر روی big_image_size_threshold بگذارید که false برگرداند و وردپرس دیگر هنگام آپلود نسخه -scaled نمیسازد. بهجایش یک عدد برگردانید و سقف را بالا بردهاید، نه اینکه حذفش کرده باشید. هر دو در functions.php یا یک mu-plugin کوچک مینشینند، و هر دو فقط روی آپلودهایی اثر دارند که بعد از فعال شدن فیلتر انجام شوند.
// Disable the cap entirely — no -scaled copies at all.
add_filter( 'big_image_size_threshold', '__return_false' );
// Or just raise it. Longest edge, in pixels.
add_filter( 'big_image_size_threshold', function () {
return 3840;
} );
وردپرس دقیقاً دارد چه کار میکند
از وردپرس ۵٫۳ به بعد، ضلع بلند هر آپلود اندازهگیری میشود. اگر آن ضلع از big_image_size_threshold بزرگتر باشد — که پیشفرضش ۲۵۶۰ پیکسل است — وردپرس تصویر را تا همان حد دوباره انکد میکند، آن را با نام your-photo-scaled.jpg ذخیره میکند و متادیتای پیوست را بازنویسی میکند تا اندازه full حالا به همان نسخه کوچکشده اشاره کند.
فایل اصلی شما حذف نمیشود. با نام اولیهاش روی دیسک میماند، در متادیتای پیوست ثبت میشود و در PHP از طریق wp_get_original_image_path() قابل دسترسی است. اما هیچ چیزی در بخش کاربری آن را سرو نمیکند. نه ویرایشگر بلوکی، نه srcset، نه پیشنمایش کتابخانه رسانه. فقط بهعنوان یک نسخه بایگانی آنجا نشسته است.
بعد از آن، همه چیز از روی فایل کوچکشده ساخته میشود، نه از روی چیزی که آپلود کردهاید:
| اندازه | از روی چه چیزی ساخته میشود |
|---|---|
full | نسخه -scaled |
large، medium_large، medium، thumbnail | نسخه -scaled |
اندازههای سفارشی از add_image_size | نسخه -scaled |
اندازههای قالب و افزونه، مثلاً woocommerce_thumbnail | نسخه -scaled |
گزینههای srcset | نسخه -scaled |
همین یک نکته است که خیلیها را غافلگیر میکند.
چرا این معمولترین دلیل «تصویر واضحم تار به نظر میرسد» است
دو اتفاق همزمان میافتد و فقط یکیشان آشکار است.
آشکارش کیفیت است. یک عکس ۴۰۰۰ پیکسلی برای هدر تمامعرض آپلود میکنید. وردپرس ۲۵۶۰ پیکسل تحویل مرورگر میدهد. روی نمایشگر معمولی که یک کادر ۱۶۰۰ پیکسلی را پر میکند، کسی متوجه نمیشود. روی صفحه رتینا با تراکم ۲x، آن کادر حدود ۳۲۰۰ پیکسل واقعی میخواهد، ۲۵۶۰ میگیرد و مرورگر فاصله را با بزرگنمایی پر میکند. لبههای نرم، جزئیات لهیده و متن داخل تصویر که محو میشود.
کمآشکارترش انکد دوباره است. نسخه -scaled یک برش بدون افت از فایل شما نیست. وردپرس آپلود شما را دیکد میکند، تغییر اندازه میدهد و با تنظیمات کیفیت JPEG خودش دوباره فشرده میکند. اگر فایل اصلی شما از قبل یک JPEG فشرده از لایتروم یا گوشی بوده، این میشود انکد نسل دوم: افت فشردهسازی روی افت فشردهسازی. جزئیات ریز، دانه فیلم و گرادیانهای یکدست بیشترین ضربه را میخورند. این را حتی وقتی ابعاد پیکسلی کافی به نظر میرسد هم میبینید.
قبل از تغییر هر چیزی مطمئن شوید. تصویر را در تب جدید باز کنید و نام فایل را در آدرس بخوانید. -scaled.jpg یعنی سقف عمل کرده. پسوند ابعادی مثل -1536x1024.jpg معنی دیگری دارد — یعنی srcset یک نسخه میانی انتخاب کرده که خیلی کوچک بوده، و فیلتر آستانه آنجا به کارتان نمیآید.
روی سرور:
find wp-content/uploads -name '*-scaled.*' | wc -l
اگر آن عدد بزرگ است، سقف داشته کل کتابخانه شما را شکل میداده.
میتوانید یک فایل را هم در ابزار غیرفعال کردن تصاویر scaled بیندازید تا قبل از تعهد به یک تنظیم ببینید آیا آن منبع آستانه را رد میکند و نسخه کوچکشده با چه ابعادی ساخته میشود.
معامله صادقانه
بیشتر مقالهها میگویند غیرفعال کردن سقف فضای دیسک میخورد. این وارونه است و ارزش دارد که دقیق گفته شود.
مصرف دیسک برای هر تصویر کمی کم میشود. با روشن بودن آستانه، وردپرس هم فایل اصلی شما و هم یک نسخه بزرگ کوچکشده را ذخیره میکند. با خاموش بودنش، فقط فایل اصلی میماند. یک فایل بهجای دو تا.
پهنای باند و وزن صفحه بالا میرود، گاهی خیلی زیاد. با خاموش بودن سقف، full همان آپلود دستنخورده شماست. هر چیزی که اندازه کامل را لینک یا رندر کند — یک لایتباکس، یک افزونه گالری، لینک «مشاهده اصل تصویر»، یا قالبی که برای هدر full را درخواست میکند — حالا فایلی میفرستد که میتواند بهجای ۹۰۰ کیلوبایت، ۶ مگابایت باشد. روی موبایل این یک مشکل واقعی برای Largest Contentful Paint است، و CDNهای تصویر همیشه نجاتتان نمیدهند چون بعضیشان بالای یک حد اندازه، فایل را بدون پردازش رد میکنند.
مصرف حافظه هنگام آپلود بالا میرود. تغییر اندازه یک تصویر ۶۰۰۰ پیکسلی در PHP حافظه بهمراتب بیشتری از یک تصویر ۲۵۶۰ پیکسلی میخواهد. روی هاست اشتراکی ارزان با محدودیت حافظه پایین PHP، غیرفعال کردن سقف راه محتملی است برای اینکه آپلودهای ناموفق یا بندانگشتیهای ناقص بگیرید. بالا بردن آستانه به ۳۸۴۰ بهجای حذف کامل آن، نسخه امنتر همین تغییر است.
به همین دلیل، پیشفرض معقول برای بیشتر سایتها این است که عدد را بالا ببرید، نه اینکه حذفش کنید. حذف کردن وقتی درست است که واقعاً تصاویری سرو میکنید که به کیفیت کامل نیاز دارند: گالریهای چاپکیفیت، زوم محصول، عکاسی معماری، یا هر جایی که انتظار میرود کاربر فایل اصلی را بررسی کند.
اعمال درست تغییر
۱. فیلتر را جایی بگذارید که دوام بیاورد. functions.php در یک قالب فرزند کار میکند. یک mu-plugin تکفایلی بهتر است، چون تعویض قالب نمیتواند بیسروصدا خنثیاش کند.
<?php
/**
* Plugin Name: Raise big image threshold
*/
add_filter( 'big_image_size_threshold', function () {
return 3840;
} );
۲. تصاویر متأثر را دوباره آپلود کنید. این همان مرحلهای است که مردم از قلم میاندازند و بعد نتیجه میگیرند فیلتر کار نکرده. آستانه فقط یک بار، هنگام آپلود، ارزیابی میشود. پیوستهای موجود متادیتای قدیمیشان را برای همیشه نگه میدارند. پیوست را حذف کنید، دوباره آپلودش کنید و بعد ارجاعها را در نوشتههایتان اصلاح کنید.
۳. انتظار نداشته باشید بازسازی بندانگشتیها چیزی را نجات دهد. دستور wp media regenerate در WP-CLI اندازههای میانی را از روی هر فایلی که متادیتا آن را کامل مینامد بازسازی میکند — که برای تصویر از قبل محدودشده، همان نسخه -scaled است. نمیتواند جزئیاتی را که دور ریخته شده برگرداند. بهعنوان تمیزکاری بعد از آپلود دوباره مفید است. بهتنهایی بهعنوان راهحل بیفایده است.
۴. نتیجه را چک کنید، فرض نکنید. بعد از آپلود دوباره، تصویر را در بخش کاربری باز کنید و دوباره نام فایل را بخوانید. نبودن -scaled یعنی فیلتر فعال است.
کجا غیرفعال کردن حرکت اشتباهی است
اگر تصاویر منبع شما از قبل زیر ۲۵۶۰ پیکسل هستند و باز هم تار به نظر میرسند، آستانه اصلاً درگیر نبوده. مشکل این است که کادر نمایش از پیکسلهای موجود بزرگتر است، و جواب یک فایل منبع بزرگتر یا یک کادر کوچکتر است — نه این فیلتر.
اگر نام فایل سرو شده بهجای -scaled پسوند ابعادی دارد، یعنی srcset یک گزینه کوچک انتخاب کرده. این معمولاً ناهماهنگی بین عرض محتوای اعلامشده قالب و کادری است که تصویر واقعاً در آن رندر میشود. خاموش کردن سقف هیچ تغییری در آن نمیدهد.
و اگر افزونهای src شما را به یک بهینهساز یا پراکسی CDN بازنویسی میکند، هیچکدام از اینها صدق نمیکند تا وقتی ببینید آن پراکسی چه چیزی سرو میکند. آنچه وردپرس باید بسازد را با آنچه مرورگر واقعاً بارگذاری میکند مقایسه کنید؛ وقتی این دو نخواندند، به چیزی که بینشان نشسته نگاه کنید.
FAQ
پرسشها
چطور تصاویر scaled را در وردپرس غیرفعال کنم؟
یک فیلتر روی big_image_size_threshold اضافه کنید که false برگرداند. آن را در functions.php یا در یک mu-plugin کوچک بگذارید. برگرداندن false سقف را کاملاً خاموش میکند، پس آپلودها ابعاد اصلیشان را نگه میدارند و هیچ نسخه -scaled ساخته نمیشود. اگر بهجای false یک عدد مثل ۳۸۴۰ برگردانید، سقف را بالا بردهاید نه اینکه حذفش کرده باشید.
پسوند -scaled در نام فایل وردپرس یعنی چه؟
نشان میدهد وردپرس یک نسخه دوبارهانکدشده ساخته، چون ضلع بلند آپلود شما از ۲۵۶۰ پیکسل بیشتر بوده. آن نسخه در سراسر سایت بهعنوان اندازه اصلی استفاده میشود. فایل اصلی شما با نام عادیاش روی دیسک میماند اما هیچ چیزی در بخش کاربری به آن لینک نمیدهد، و هر بندانگشتی و هر گزینه srcset از روی همان نسخه کوچکشده ساخته میشود.
غیرفعال کردن تصاویر scaled فضای دیسک بیشتری مصرف میکند؟
برای هر تصویر معمولاً کمی کمتر مصرف میکند، چون وردپرس دیگر یک فایل بزرگ دوم را کنار فایل اصلی شما نمینویسد. هزینه واقعی پهنای باند است، نه فضای ذخیرهسازی. با خاموش بودن سقف، هر چیزی که به اندازه کامل لینک میدهد فایل دستنخورده شما را سرو میکند که میتواند روی اینترنت موبایل چند مگابایت باشد.
غیرفعال کردن آستانه، تصاویری را که همین حالا تار هستند درست میکند؟
نه. این فیلتر فقط روی آپلودهای جدید اثر دارد. تصاویری که از قبل در کتابخانه هستند متادیتایی دارند که به نسخه کوچکشده اشاره میکند، و بازسازی بندانگشتیها هم اندازهها را از روی همان فایل محدودشده میسازد. برای برگرداندن کیفیت باید پیوست را حذف کنید و بعد از فعال شدن فیلتر دوباره آپلودش کنید.
آیا ۲۵۶۰ پیکسل آستانه درستی برای نگه داشتن است؟
برای بیشتر سایتهای محتوایی، بله. یک منبع ۲۵۶۰ پیکسلی یک کادر نمایش ۱۲۸۰ پیکسلی را با تراکم پیکسل ۲x پوشش میدهد که حالت رایج است. اگر هدرهای تمامعرض، زوم محصول یا گالری عکاسی دارید آن را به ۳۸۴۰ ببرید. فقط وقتی کاملاً غیرفعالش کنید که واقعاً به سرو کردن فایل دستنخورده نیاز داشته باشید.