דילוג לתוכן
תמונות ומדיה

איך לבטל תמונות -scaled בוורדפרס (big_image_size_threshold)

תיקון תמונות מטושטשות בוורדפרס על ידי הגדלה או ביטול של מגבלת 2560 פיקסלים עם הפילטר big_image_size_threshold, ולמה העלאה מחדש היא השלב שכולם מדלגים עליו.

פורסם

הוסף פילטר על big_image_size_threshold שמחזיר false ווורדפרס תפסיק ליצור עותקי -scaled בהעלאה. החזר מספר במקום ואתה מעלה את המגבלה במקום להסיר אותה. שניהם נכנסים ל-functions.php או לתוסף mu קטן, ושניהם משפיעים רק על העלאות שנעשו אחרי שהפילטר פעיל.

// 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;
} );

מה וורדפרס באמת עושה

מאז וורדפרס 5.3, כל העלאה נמדדת בצלע הארוכה שלה. אם הצלע הזאת גדולה מ-big_image_size_threshold — 2560 פיקסלים כברירת מחדל — וורדפרס מקודדת מחדש את התמונה עד לגבול הזה, שומרת אותה כ-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

העובדה הבודדת הזאת היא הסיבה שכל כך הרבה אנשים נתפסים כאן.

למה זו הסיבה הרגילה ל”התמונה החדה שלי נראית מטושטשת”

שני דברים קורים בו זמנית, ורק אחד מהם ברור.

הברור הוא רזולוציה. אתה מעלה תצלום של 4000 פיקסלים לכותרת ראשית ברוחב מלא. וורדפרס מוסרת לדפדפן 2560. במסך רגיל שממלא מכולה של 1600 פיקסלים, אף אחד לא שם לב. במסך רטינה בצפיפות כפולה, המכולה הזאת רוצה בערך 3200 פיקסלים אמיתיים, מקבלת 2560, והדפדפן מותח את ההפרש. קצוות רכים, פרטים מרוחים, וטקסט בתוך התמונה שנעשה מטושטש.

הפחות ברור הוא הקידוד מחדש. העותק -scaled הוא לא חיתוך ללא אובדן של הקובץ שלך. וורדפרס מפענחת את ההעלאה שלך, משנה את הגודל, ודוחסת מחדש בהגדרת איכות ה-JPEG שלה. אם המקור שלך כבר היה JPEG דחוס מ-Lightroom או מטלפון, זה קידוד מדור שני: ארטיפקטים של דחיסה על גבי ארטיפקטים של דחיסה. פרטים עדינים, גרעיניות ומעברי גוון חלקים סובלים הכי הרבה. אפשר לראות את זה גם כשמידות הפיקסלים נראות מספיקות.

אשר את זה לפני שאתה משנה משהו. פתח את התמונה בלשונית חדשה וקרא את שם הקובץ בכתובת. -scaled.jpg אומר שהמגבלה פעלה. סיומת מידות כמו -1536x1024.jpg אומרת משהו אחר לגמרי — srcset בחר גרסת ביניים שהייתה קטנה מדי, ופילטר הסף לא יעזור לך שם.

בשרת:

find wp-content/uploads -name '*-scaled.*' | wc -l

אם המספר הזה גדול, המגבלה עיצבה את כל הספרייה שלך.

אפשר גם לגרור קובץ אל כלי ביטול תמונות scaled כדי לראות אם מקור מסוים יחצה את הסף ובאילו מידות העותק המוקטן ינחת, לפני שאתה מתחייב להגדרה.

חילופי הדברים, בכנות

רוב המאמרים אומרים לך שביטול המגבלה עולה בשטח דיסק. זה הפוך, וכדאי לדייק בזה.

השימוש בדיסק לכל תמונה יורד מעט. כשהסף פעיל, וורדפרס שומרת את המקור שלך וגם עותק מוקטן גדול. כשהוא כבוי, נשאר לך רק המקור. קובץ אחד במקום שניים.

רוחב פס ומשקל עמוד עולים, לפעמים הרבה. כשהמגבלה כבויה, full הוא ההעלאה המקורית שלך ללא נגיעה. כל דבר שמקשר או מציג את הגודל המלא — לייטבוקס, תוסף גלריה, קישור “הצג מקור”, תבנית שמבקשת full לכותרות ראשיות — שולח עכשיו קובץ שיכול להיות 6MB במקום 900KB. במובייל זו בעיית Largest Contentful Paint אמיתית, ו-CDN לתמונות לא תמיד יציל אותך כי חלקם מעבירים כמו שהוא מעל גודל מסוים.

צריכת הזיכרון בהעלאה עולה. שינוי גודל של תמונת 6000 פיקסלים ב-PHP דורש הרבה יותר זיכרון מתמונת 2560. באחסון שיתופי זול עם memory_limit נמוך של PHP, ביטול המגבלה הוא דרך סבירה להתחיל לקבל העלאות שנכשלות או תמונות ממוזערות שנוצרות חלקית. העלאת הסף ל-3840 במקום הסרתו היא הגרסה הבטוחה יותר של אותו שינוי.

ולכן ברירת המחדל ההגיונית לרוב האתרים היא להעלות את המספר, לא להסיר אותו. הסרה נכונה כשאתה מגיש תמונות שבאמת זקוקות לרזולוציה מלאה: גלריות באיכות דפוס, זום על מוצרים, צילומי אדריכלות, כל מקרה שבו מצפים מהמשתמש לבחון את המקור.

איך מיישמים את השינוי כמו שצריך

1. שים את הפילטר במקום ששורד. functions.php בתבנית בת עובד. תוסף mu של קובץ אחד עדיף, כי החלפת תבנית לא יכולה לבטל אותו בשקט.

<?php
/**
 * Plugin Name: Raise big image threshold
 */
add_filter( 'big_image_size_threshold', function () {
    return 3840;
} );

2. העלה מחדש את התמונות המושפעות. זה השלב שאנשים מדלגים עליו ואז מסיקים שהפילטר לא עבד. הסף נבדק פעם אחת, בהעלאה. קבצים מצורפים קיימים שומרים על המטא־נתונים הישנים שלהם לנצח. מחק את הקובץ המצורף והעלה אותו שוב, ואז תקן את ההפניות בפוסטים שלך.

3. אל תצפה שיצירה מחדש של תמונות ממוזערות תציל משהו. wp media regenerate דרך WP-CLI בונה מחדש גדלי ביניים ממה שהמטא־נתונים מגדירים כקובץ המלא — שעבור תמונה שכבר הוגבלה הוא העותק -scaled. הוא לא יכול לשחזר פרטים שנזרקו. שימושי כניקוי אחרי העלאה מחדש. חסר תועלת כתיקון בפני עצמו.

4. בדוק את התוצאה, אל תניח אותה. אחרי ההעלאה מחדש, פתח את התמונה בצד הגלוי וקרא שוב את שם הקובץ. אין -scaled — הפילטר חי.

מתי ביטול הוא המהלך הלא נכון

אם תמונות המקור שלך כבר מתחת ל-2560 פיקסלים והן עדיין נראות מטושטשות, הסף מעולם לא היה מעורב. הבעיה היא שתיבת התצוגה גדולה מהפיקסלים הזמינים, והפתרון הוא קובץ מקור גדול יותר או מכולה קטנה יותר — לא הפילטר הזה.

אם שם הקובץ שמוגש נושא סיומת מידות ולא -scaled, ‏srcset בחר מועמד קטן. זה בדרך כלל אי־התאמה בין רוחב התוכן המוצהר של התבנית שלך לבין התיבה שבה התמונה באמת מוצגת. כיבוי המגבלה לא משנה שם כלום.

ואם תוסף משכתב את ה-src שלך למאיץ או לפרוקסי CDN, שום דבר מכל זה לא רלוונטי עד שתבדוק מה הפרוקסי הזה מגיש. השווה את מה שוורדפרס אמורה לייצר מול מה שהדפדפן באמת טוען; כשאלה לא מסכימים, תסתכל על מה שיושב ביניהם.

FAQ

שאלות

איך מבטלים תמונות scaled בוורדפרס?

הוסף פילטר על big_image_size_threshold שמחזיר false. שים אותו ב-functions.php או בתוסף mu קטן. החזרת false מכבה את המגבלה לגמרי, כך שהעלאות שומרות על המידות המקוריות שלהן ולא נוצר עותק -scaled. החזרת מספר במקום, למשל 3840, מעלה את המגבלה במקום להסיר אותה.

מה המשמעות של הסיומת -scaled בשם קובץ בוורדפרס?

היא מסמנת עותק מקודד מחדש שוורדפרס יצרה מפני שההעלאה שלך עברה 2560 פיקסלים בצלע הארוכה. העותק הזה הופך לגודל המלא בכל האתר שלך. הקובץ המקורי נשאר על הדיסק תחת השם הרגיל שלו אבל שום דבר בצד הגלוי לא מקשר אליו, וכל תמונה ממוזערת וכל מועמד ב-srcset נבנים מהעותק המוקטן.

האם ביטול תמונות scaled צורך יותר שטח דיסק?

לכל תמונה זה בדרך כלל צורך מעט פחות, כי וורדפרס מפסיקה לכתוב קובץ גדול שני לצד המקור שלך. העלות האמיתית היא רוחב פס, לא אחסון. כשהמגבלה כבויה, כל דבר שמקשר לגודל המלא מגיש את ההעלאה המקורית שלך, שיכולה להיות כמה מגה־בייטים בחיבור סלולרי.

האם ביטול הסף יתקן תמונות שכבר מטושטשות?

לא. הפילטר משפיע רק על העלאות חדשות. תמונות שכבר בספרייה שומרות מטא־נתונים שמצביעים על העותק המוקטן שלהן, ויצירה מחדש של תמונות ממוזערות בונה את הגדלים מאותו קובץ מוגבל עצמו. כדי לשחזר את הרזולוציה אתה חייב למחוק את הקובץ המצורף ולהעלות אותו שוב אחרי שהפילטר פעיל.

האם 2560 פיקסלים הוא הסף הנכון לשמור עליו?

לרוב אתרי התוכן, כן. מקור של 2560 פיקסלים מכסה תיבת תצוגה של 1280 פיקסלים בצפיפות פיקסלים כפולה, שזה המקרה הנפוץ. העלה אותו ל-3840 אם יש לך כותרות ראשיות ברוחב מלא, זום על מוצרים, או גלריות צילום. בטל אותו לגמרי רק כשאתה באמת צריך להגיש קבצים מקוריים ללא נגיעה.