15
בספטמבר
2011

טיפ וורדפרס: הגבלת מידות בעת העלאת תמונות לספריה

מאת: מאור ברזני | תגובות: 11 | נושאים: וורדפרס
תגיות: , , , , , |

one way cc by Robert Linderלפעמים יש אתרי אינטרנט בהם נרצה לקבוע הגבלה על מידות של תמונות שמעולות לשרת. בטיפ קצר זה נלמד איך אפשר להגביל מידות מינימום או מקסימום לתמונות, בעת העלאת התמונות לספריית המדיה, ומתן שגיאה אם התמונה שהועלתה חורגת מהגבלות אלה

 

בשאלה באתר WordPress Answers נשאלה שאלה מעניינת: "נדרשת לי דרך להגביל כותבים באתר מהעלאת תמונות הקטנות מממדים מסוימים. למשל, אני רוצה לאפשר העלאת תמונות שהן לפחות בגודל של 400 פיקסל על 400 פיקסל. אם האימאג' קטן יותר, הכותב צריך לקבל הודעת שגיאה שמידות התמונה קטנות מדי."

אפשר פשוט להוסיף עוד מידות חיתוך לכל תמונה

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

נכון שאפשר בקלות רבה עם וורדפרס להגדיר מידות של תמונה בעזרת add_image_size ולהשתמש בתמונה כדי להציג באתר, אך הדבר אומר שכל תמונה שעולה לשרת נחתכת לעוד גודל, מה שאומר עוד זמן בעת העלאת התמונה, ועוד נפח דיסק בטווח הרחוק (זה אתר עם הרבה תוכן ובכל תוכן יש תמונה אחת לפחות). אפשר היה גם להשתמש ב-timthumb, שהוא סקריפט php שחותך תמונות on-the-fly, כדי להציג את הגודל המתאים.

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

וורדפרס לשירותך, פונקציית פילטר בשבילך

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

את הקוד הבא יש להוסיף לקובץ הפונקציות functions.php של ערכת העיצוב שלכם, או לקובץ פונקציות מותאם אישית. לאחר מכן יש לשמור את הקובץ ולהעלות לשרת (לאחר גיבוי הקובץ הקיים):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
add_filter('wp_handle_upload_prefilter','tc_handle_upload_prefilter');
function tc_handle_upload_prefilter($file)
{

    $img=getimagesize($file['tmp_name']);
    $minimum = array('width' => '640', 'height' => '480');
    $width   = $img[0];
    $height  = $img[1];

    if ($width < $minimum['width'] )
        return array("error"=>"Image dimensions are too small. Minimum width is {$minimum['width']}px. Uploaded image width is $width px");

    elseif ($height <  $minimum['height'])
        return array("error"=>"Image dimensions are too small. Minimum height is {$minimum['height']}px. Uploaded image width is $width px");
    else
        return $file;
}

בדוגמה הנ"ל מיושם המקרה הפרטי שהבאתי בתשובה, ובה קביעת מידות מינימום לתמונה. אפשר כמובן לשנות את הפונקציה או לעשות אותה מורכבת יותר ולהתאים אותה לצרכים ספציפיים נוספים. אם רוצים מידות שונות, אפשר לשנות את המספרים  640 לרוחב, ו-480 לאורך, שמופיעים בשורה מס' 6. את הודעות השגיאה אפשר לשנות בשורות 11 ו-14, יש שם גם את ההודעה עצמה וגם את המשתנים שמכילים את המידות של התמונה שהועלתה ומהי מידת ההגבלה שנקבעה.

 

Gravity Forms Plugin for WordPress
שתפו גם אחרים:
  • email
  • Print
  • RSS
  • Facebook
  • Twitter
  • LinkedIn
  • Google Bookmarks
  • Live
  • PDF
  • MySpace
  • del.icio.us
  • Digg
  • Technorati
  • Yahoo! Bookmarks
  • Yahoo! Buzz
  • Add to favorites

11 תגובות »

פיד RSS לתגובות בפוסט | טראקבק


הוסף תגובה

You can add images to your comment by clicking here.

TechnoCraft - פתרונות אינטרנט


אֶקְסְפֶּרִימֶנְט דוֹט אֶפֶס - וורדפרס, תוכן, טכנולוגיה ועוד כמה דברים - מופעל באמצעות WordPress | פתרונות אינטרנט