כאשר אתם מעלים תמונה לספריית המדיה בוורדפרס, נוצרים מספר עותקים שלה בגדלים שונים. וורדפרס עושה זאת כי חלקים שונים של האתר צריכים את אותה תמונה ברזולוציות שונות – תמונה גדולה לבאנר, תמונה ממוזערת ברשת, תמונה קטנה בווידג'ט וכדומה.
כברירת מחדל, וורדפרס רושמת שישה גדלי תמונות, ורוב התבניות והתוספים מוסיפים עוד. אתם יכולים לרשום גדלים מותאמים אישית, להסיר כאלו שאינכם צריכים ולשלוט באילו גדלים נוצרים לפי סוג תוכן.
חשוב לזכור שיותר גדלי תמונות משמעו יותר קבצים בתיקיית ה-uploads. כל תמונה שתעלו יכולה לייצר עשרות עותקים אם התבנית והתוספים שלכם רושמים גדלים רבים, דבר שתופס מקום בדיסק ומאט את ההעלאות.
גדלי תמונות ברירת המחדל בוורדפרס
וורדפרס רושמת שישה גדלי תמונות כברירת מחדל. תוכלו להגדיר שלושה מהם תחת הגדרות > מדיה בממשק הניהול:
| שם הגודל | מידות ברירת מחדל | ניתן לשינוי? |
|---|---|---|
thumbnail |
150 x 150 (חיתוך) | כן (הגדרות > מדיה) |
medium |
300 x 300 (מקסימום) | כן (הגדרות > מדיה) |
medium_large |
768 x 0 (רוחב בלבד) | לא (נוסף ב-WP 4.4 עבור srcset רספונסיבי) |
large |
1024 x 1024 (מקסימום) | כן (הגדרות > מדיה) |
1536x1536 |
1536 x 1536 (מקסימום) | לא (נוסף ב-WP 5.3, פי 2 מ-medium_large) |
2048x2048 |
2048 x 2048 (מקסימום) | לא (נוסף ב-WP 5.3, פי 2 מ-large) |
וורדפרס יוצרת גודל רק כאשר התמונה שהעליתם גדולה ממנו, כך שתמונה ברוחב 2000 פיקסלים לא תקבל עותק 2048x2048. וורדפרס אף פעם לא מגדילה תמונות.
החל מוורדפרס 5.3, כל תמונה שרוחבה או גובהה עולים על 2560 פיקסלים מוקטנת כך שתיכנס ב-2560 x 2560. וורדפרס שומרת את העותק המוקטן עם הסיומת -scaled, ואת הקובץ המקורי היא משאירה כפי שהוא.
כך מתאר זאת צוות הליבה של וורדפרס: "The scaled-down image will be used as the largest available size." – Justin Ahinon, "Introducing handling of big images in WordPress 5.3", Make WordPress Core
תוכלו לשנות את הסף באמצעות הפילטר big_image_size_threshold, או להחזיר false בכדי לבטל את ההקטנה:
add_filter( 'big_image_size_threshold', function() {
return 1920;
} );
הסרת גדלי תמונות ברירת מחדל
אם אינכם צריכים גדלים מסוימים, הסירו אותם באמצעות הפילטר intermediate_image_sizes. הוסיפו את הקוד הבא לקובץ functions.php:
add_filter( 'intermediate_image_sizes', function( $sizes ) {
return array_diff( $sizes, array( 'medium', 'large' ) );
} );
קוד זה מונע מוורדפרס ליצור את הגדלים האלו בכל העלאה. הסירו רק גדלים שאתם בטוחים שאינם בשימוש על ידי התבנית או התוספים שלכם.
שימוש בגדלי תמונות בתבנית
ישנן שתי דרכים להשתמש בגדלי תמונות:
דרך ממשק הניהול
כאשר אתם מכניסים תמונה לפוסט, תוכלו לבחור את הגודל מפאנל הגדרות התמונה. הגדלים המותאמים אישית שלכם יופיעו ברשימה הנפתחת אם תרשמו אותם בספריית המדיה (מוסבר בהמשך המדריך).
באמצעות קוד
בבניית תבניות, השתמשו בפונקציות תמונה של וורדפרס והעבירו את שם הגודל כפרמטר:
the_post_thumbnail( 'large' );
$image = wp_get_attachment_image_src( $attachment_id, 'my-custom-size' );
echo get_the_post_thumbnail( $post_id, 'thumbnail' );
echo wp_get_attachment_image( $attachment_id, 'card-thumbnail' );
the_post_thumbnail() ו-get_the_post_thumbnail() מציגות תמונה ראשית. wp_get_attachment_image() מציגה כל קובץ מדיה כתגית <img> עם srcset, ו-wp_get_attachment_image_src() מחזירה רק את הכתובת והמידות.
יצירת גדלי תמונות מותאמים אישית
הוספת גדלי תמונות משלכם היא תהליך של שני שלבים. השלב השני הוא אופציונלי.
שלב 1: רישום הגודל עם add_image_size
הוסיפו את הקוד הבא לקובץ functions.php:
add_action( 'after_setup_theme', function() {
add_image_size( 'card-thumbnail', 400, 300, true );
add_image_size( 'hero-banner', 1200, 600, true );
add_image_size( 'square-medium', 500, 500, true );
} );
הפונקציה add_image_size() מקבלת ארבעה פרמטרים:
- שם – slug ייחודי לגודל (לדוגמה,
card-thumbnail) - רוחב – הרוחב היעד בפיקסלים
- גובה – הגובה היעד בפיקסלים
- חיתוך –
trueחותך למידות המדויקות (למרכז כברירת מחדל),falseמשנה גודל באופן פרופורציונלי. ניתן גם להעביר מערך כמוarray( 'left', 'top' )כדי לשלוט במיקום החיתוך.
שלב 2: הוספת הגודל לתפריט ספריית המדיה
שלב זה הוא אופציונלי אך הופך את הגודל המותאם לזמין בבורר גודל התמונה בממשק הניהול:
add_filter( 'image_size_names_choose', function( $sizes ) {
$sizes['card-thumbnail'] = 'Card Thumbnail';
$sizes['hero-banner'] = 'Hero Banner';
return $sizes;
} );
לאחר הוספת קוד זה, הגדלים המותאמים שלכם יופיעו כאפשרויות בהכנסת תמונות לפוסטים.
גדלי תמונות חדשים חלים רק על תמונות שהועלו לאחר הרישום. תמונות קיימות לא יקבלו את הגודל החדש עד שתייצרו מחדש thumbnails. השתמשו ב-WP-CLI (wp media regenerate) או בתוסף כמו Regenerate Thumbnails כדי ליצור את הגדלים החדשים עבור תמונות קיימות.
ייצור מחדש של גדלי תמונות
לאחר שינוי הפרמטרים של add_image_size(), לתמונות קיימות עדיין יש את המידות הישנות. תצטרכו לייצר אותן מחדש.
באמצעות WP-CLI
השיטה המהירה ביותר. הריצו משורת הפקודה:
wp media regenerate --yes
כברירת מחדל הפקודה מוחקת את כל ה-thumbnails הקיימים ויוצרת מחדש את כל הגדלים הרשומים. בכדי ליצור רק את הגדלים שחסרים לתמונה, הוסיפו --only-missing:
wp media regenerate --only-missing --yes
כדי לייצר מחדש רק גודל תמונה ספציפי:
wp media regenerate --image_size=card-thumbnail --yes
באמצעות תוסף
אם אין לכם גישה לשורת הפקודה, השתמשו בתוסף Regenerate Thumbnails. הוא מעבד תמונות באצוות מתוך ממשק הניהול של וורדפרס.
צמצום גדלי תמונות לפי סוג תוכן
כאשר לאתר שלכם יש מספר סוגי תוכן מותאמים (Custom Post Types), לכל אחד גדלי תמונות משלו, אתם יכולים להגיע למצב של 20-30 תמונות לכל העלאה. תוכלו לצמצם זאת על ידי ייצור רק הגדלים שכל סוג תוכן באמת צריך:
add_filter( 'intermediate_image_sizes_advanced', function( $sizes, $image_meta, $attachment_id ) {
$parent = wp_get_post_parent_id( $attachment_id );
$type = $parent ? get_post_type( $parent ) : '';
$allowed_by_type = array(
'page' => array( 'thumbnail', 'medium', 'hero-banner' ),
'portfolio' => array( 'card-thumbnail', 'square-medium' ),
);
if ( isset( $allowed_by_type[ $type ] ) ) {
return array_intersect_key( $sizes, array_flip( $allowed_by_type[ $type ] ) );
}
return $sizes;
}, 10, 3 );
הפילטר בודק לאיזה פוסט הועלתה התמונה, ולכן הוא עובד גם בעורך הבלוקים וגם בחלון המדיה הקלאסי, והמגבלה נשמרת גם כשאתם מריצים wp media regenerate. קטעי קוד ישנים שקוראים את $_REQUEST['post_id'] לא עושים אף אחד מהשניים, מכיוון שעורך הבלוקים לא שולח את השדה הזה. תמונות שהועלו ישירות לספריית המדיה אינן משויכות לפוסט, ולכן הן עדיין יקבלו את כל הגדלים.
כיצד לראות גדלי תמונות רשומים
כדי לראות את כל גדלי התמונות שנרשמו על ידי התבנית והתוספים שלכם, תוכלו להשתמש ב-WP-CLI או בקטע קוד לדיבוג.
באמצעות WP-CLI:
wp media image-size
הפקודה מציגה כל גודל רשום (כולל ברירות המחדל של וורדפרס) עם הרוחב, הגובה ואופן החיתוך שלו. או הוסיפו באופן זמני לקובץ תבנית:
<?php
echo '<pre>';
print_r( wp_get_registered_image_subsizes() );
echo '</pre>';
?>
הסירו את קוד הדיבוג לאחר שסיימתם לבדוק. זהו כלי פיתוח, לא משהו שצריך להישאר באתר בפרודקשן.
שאלות נפוצות
שאלות נפוצות על גדלי תמונות בוורדפרס:
-scaled ומשתמשת בו כתמונה הראשית, והקובץ המקורי נשמר. תוכלו לשנות את הסף באמצעות הפילטר big_image_size_threshold, או להחזיר false כדי לבטל את ההקטנה לחלוטין.
true, התמונה נחתכת למידות המדויקות שציינתם (חיתוך למרכז כברירת מחדל). כאשר false, התמונה משנה גודל באופן פרופורציונלי כדי להתאים לרוחב ולגובה שהוגדרו. ניתן גם להעביר מערך כמו array( 'left', 'top' ) כדי לשלוט במיקום העוגן של החיתוך.
wp media regenerate דרך WP-CLI, או השתמשו בתוסף כמו Regenerate Thumbnails. כברירת מחדל wp media regenerate מוחקת ויוצרת מחדש את כל הגדלים; הוסיפו --only-missing בכדי ליצור רק את הגדלים שחסרים לתמונה.
wp media image-size דרך WP-CLI, או הדפיסו באופן זמני את wp_get_registered_image_subsizes() בקובץ תבנית. שתי הדרכים מציגות כל גודל רשום (כולל ברירות המחדל של וורדפרס) עם המידות והגדרות החיתוך.
intermediate_image_sizes מונעת מוורדפרס ליצור את הגודל הזה רק בהעלאות עתידיות. קבצים שכבר נוצרו נשארים בדיסק. בכדי למחוק את הקבצים שנשארו מגדלים שכבר אינם רשומים, הריצו wp media regenerate --delete-unknown.
סיכום
וורדפרס מייצרת מספר גדלי תמונות לכל העלאה כדי להגיש את הרזולוציה הנכונה בחלקים שונים של האתר. תוכלו להגדיר את ברירות המחדל תחת הגדרות > מדיה, לרשום גדלים מותאמים עם add_image_size(), ולהסיר גדלים שאינכם צריכים באמצעות הפילטר intermediate_image_sizes.
עבור אתרים עם סוגי תוכן רבים, ייצרו רק את הגדלים שכל סוג באמת צריך כדי לחסוך מקום בדיסק. לאחר שינוי פרמטרי גודל תמונה, ייצרו thumbnails מחדש עם WP-CLI או תוסף כדי שתמונות קיימות יקבלו את המידות החדשות.
למידע נוסף על אופטימיזציה לתמונות, עיינו במדריך על אופטימיזציה לתמונות באתרי וורדפרס מבחינת SEO.
אחלה מאמר. חידשת לי בפונקציה האחרונה – לא ידעתי שאפשר לשנות גדלים לפי סוג תוכן. זה ממש מעניין.
משהו נוסף שוורדפרס עושה עם גדלי התמונות השונים זה משתמשת בהם בשביל רזולוציות שונות (אם הם באותה פרופורציה כמו התמונה המקורית) במאפיין ה – srcset. כתבתי קצת על זה בשיתוף קולגתי לשעבר רחלי.
זה נכון לאה…. שמח שהצלחתי מעט לחדש! 🙂
מה לגבי יצירה של גודל תמונה ל- page tempalte ספציפי, אני לא הצלחתי למצוא פתרון, יש לך משהו מעניין?
פסוט מעולה כרגיל..
תודה אלון 🙂
זו שאלה מעניינת וזה בטח יכול להיות מאד שימושי. אין לי פתרון לכך בשלב הנוכחי, אבל אם מצאת אחד כזה מאד אשמח אם תעשה פה איזה פינג…
היי תודה רבה על המידע המעולה, רציתי לשאול היכן אני יכולה להשיג את הפונט שהשתמשת בו לנושא הפוסט, שם הפונט – אלמוני צר
היי נעמה,
בצעי חיפוש בגוגל ותגיעי לאתר אאא המוכר את הפונט הזה…
שלום רב,
שאלה בעניין איכות תמונות בוויקס ו וורדפרס.
בניתי בעבר אתר (בלוג) בוויקס וכרגע אני בתהליכי מעבר של האתר לוורדפרס. משום מה האיכות של התמונות המוצגות בוורדפרס נמוכה יותר מאיכותן של אותן תמונות (מאותם קבצי מקור) בוויקס. האם יש סיבה לתופעה? האם יש דרך לשפר את איכות התמונות המוצגות בוורדפרס ?
היי רומק,
וורדפרס מורידה באופן אוטומטי את איכות התמונות לטובת זמן טעינה מהיר יותר. הוסף את הקוד הבא לקובץ functions.php של התבנית שלך בכדי ששמירה של תמונות בפורמט JPEG תהיה באיכות המקורית:
תאלץ להעלות מחדש את התמונות בכדי לראות תוצאה…
אויי לא! מדובר במאות תמונות.
הכוונה היא להעלות את התמונות מחדש רק לספרית המדיה או לכל פוסט בנפרד.
לחילופין, השתמש בתוסף בשם Regenerate Thumbnails…
תודה רבה!
תודה רבה רועי!
איך מבטלים את הורדת איכות התמונה? כל פעם שאני מעלה תמונה וורדפרס מוריד לה את האיכות.
יש דרך למנוע את זה?
היי שמעון,
ראשית הוסף את הקוד הבא ל functions.php:
שנית, בדוק כי ImageMagick extension מותקן בשרת. תוכל לאחר מכן להשתמש בתוסף הבא בכדי לדאוג שוורדפרס תשתמש ב extension המדובר:
https://wordpress.org/plugins/imagemagick-engine/
בהצלחה!
האם אפשר לשאול שאלה על אלמנטור?
היי אווה, את יכולה לנסות…. 🙂
היי, מופיעה לי הודעת שגיאה על כך שהשרת תפוס בכל פעם שאני מנסה להעלות תמונה לאלמנטור (הגודל של התמונה תקין, ניסיתי להעלות גם בגדלים שונים). מה יכול לפתור את הבעיה?
בתודה מראש
היי סיון,
האם את מקבלת שגיאת HTTP כשאת מעלה תמונה? אם כן, נסי את הפתרון בקישור שצירפתי…
היי רועי,
זו הודעת השגיאה, האם זה מה שהתכוונת? לא רשום HTTP…
עיבוד תמונה לאחר-העלאה נכשל. הדבר נובע ככל הנראה מכיוון שהשרת תפוס או שאין לו מספיק משאבים. העלאת תמונה קטנה יותר עשויה לעזור. הגודל המקסימלי המוצע הוא 2500 פיקסלים.
תודה!
הבנתי,
אם יש לך גישת FTP, הוסיפי את השורה הבאה לקובץ wp-config.php ונסי שוב:
שימי לב להוסיף אותה בדיוק לפני השורה הבאה:
רועי המון תודה, זה עבד!
תענוג!! 😉
היי רועי,
נתקלתי באותה השגיאה בזמן העלאת תמונות.. יש לי איך לפתור את זה במידה ואני לא מתעסקת בקוד, פשוט מקימה אתר באלמנטור? תודה רבה!
היי ארין,
הפתרון הוא אותו פתרון – בקשי ממישהו בקבוצות וורדפרס לעזור לך להוסיף את שורת הקוד ובטוח מישהו יתנדב.
ואם מדובר על תמונות png?
באיזה הקשר? כל הנאמר בפוסט רלוונטי גם לקבצי PNG…
הי רועי אי אפשר להרשם לרשימת תפוצה.. אי אפשר להקליד את המייל במקום הנדרש.
היי ברורויה,
את יכולה לפרט? שיניתי את צבע הטקסט – אולי הבעיה נפתרה?
היי רועי, פוסט מעולה, מצרפת אותך לרשימת המעקב שלי 🙂
שאלה קטנה…כשיוצרים גלריה, כל פעם שלוחצים על תמונה להגדלה הלחצנים לסגירת התמונה וכל מה שליד זה מופיעים בקטן מאוד בפינה השמאלית וכמעט בקושי ניתן להבחין בהם. האם יש דרך שבה ניתן לשלוט בגודל של הלחצנים הללו? אם כן זאת תהיה תגלית מדהימה עבורי, בבקשה תגיד שיש.
היי רלי 🙂
שלחי לי לינק לעמוד באתר שלך עם גלריה ואומר לך מה צריך לעשות….
היי רועי. זה הקישור למשל: https://creative-shop.co.il/logos, אם יש לך פתרון זה ממש יעזור לי 🙂
אחד המאמרים המעניינים, חבל שקראתי אותו לאחר שהשרת שלי מפוצץ בגרסאות רבות לכל תמונה :-),
השאלה האם יש דרך קלה להתפטר מעשרות עותקים של כל תמונה שנוצרו בעבר שרת, להשאיר עותק אחד לדוגמה את הכי גדול, ואחר-כך ליצור רק עוד 2 הנדרשים…
היי אייל,
אתה יכול לנסות תוסף בסגנון הבא, אך וודא שאתה שעושה גיבוי מלא לאתר לפני כן!
הי רועי אני רוצה לבנות בנדל של מוצרים ולעלות אותו לחנות שלי בוורדפרס, רציתי לדעת מה הגודל הרצוי של קובץ כדי לבנות את הבנדל.
היי חיים,
אני לא בטוח שאני מבין את השאלה. אתה מדבר על הגודל של תמונות המוצר? אם כן אז זה לגמרי בהתאם לתבנית בה אתה משתמש.
כן התכוונתי לתמונת מוצר . ואני משתמש ב canva
היי רציתי לשאול למה כשאני מעלה תמונות לאתר הן יוצאות מטושטש על אף שהתמונות ברורות לגמרי במקורי?
היי יעל, האם התמונות מוצגות באתר באותם מימדים של התמונה המקורית? אם לא, האם באותן פרופרציות?