scroll
כיצד לאפשר העלאת קבצים עבור משתמש אורח ב JetFormBuilder

כיצד לאפשר העלאת קבצים עבור משתמש אורח ב JetFormBuilder

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

התוכן נכתב ע"י eliko.web.studio בשביל לתת לכם אפשרויות עם הכי פחות עבודה ושלא תצטרכו לחפש תוספים ששוקלים המון או שדורשים כסף עבור פונקציות פשוטות

The content was written by eliko.web.studio to provide you with solutions that require minimal effort and eliminate the need to search for heavy plugins or pay for simple functionalities.

אתם מנסים לתת למשתמשים שלכם – כולל אורחים – אפשרות להעלות קבצים דרך טופס של JetFormBuilder. אתם אפילו הולכים לפי הספר: נכנסים ל־User Access של שדה המדיה, בוחרים באופציה המבטיחה “Any user (incl. Guest)”, אומרים לעצמכם “סבבה, זה אמור לעבוד”…

אבל בפועל? הקבצים לא עולים.

הם לא נשמרים בפוסט, לא מופיעים בפרופיל המשתמש, ולפעמים אפילו לא מגיעים לספריית המדיה.

אז מה עושים?


JetFormBuilder בעצמם הבינו את הבעיה, וסיפקו קוד PHP פשוט שאמור לטפל בה. הקוד משתמש ב־Hook פנימי שנקרא jet-form-builder/media-field/before-upload ומאפשר להפעיל הרשאות העלאה גם עבור משתמשים אורחים.

add_action(
	'jet-form-builder/media-field/before-upload',
	function ( $parser ) {
		$class_name = $parser->get_context()->get_class_name();

		// בדיקה אם יש קלאס בשם allow-insert-attachments
		if ( ! $class_name || false === strpos( $class_name, 'allow-insert-attachments' ) ) {
			return;
		}

		// מאפשר העלאה גם לאורחים
		$parser->get_context()->allow_for_guest();

		// מגדיר שהערך שישמר יהיה מזהה הקובץ (ID)
		$parser->get_context()->update_setting( 'insert_attachment', true );
		$parser->get_context()->update_setting( 'value_format', 'id' );
	}
);

את הקוד הזה יש להכניס לקובץ functions.php של התבנית או כקוד מותאם באתר.
בשדה התמונה בטופס פשוט מוסיפים את הקלאס allow-insert-attachments, וזה אמור לעבוד.

וזה באמת עובד — אבל רק כל עוד יש שדה אחד בטופס.

למה הקוד נופל כשיש שני שדות?

כאשר מוסיפים שני שדות תמונה עם אותו קלאס, הקוד מתבצע עבור כל אחד מהם – אך JetFormBuilder לא יודע להתמודד עם פעולות כפולות כאלה בזמן אמת, מה שמוביל לשגיאת שרת (500) או כשל בהעלאה.

הפתרון שלי: שיפור הקוד כך שיתמוך בכמה שדות

שדרגתי את הקוד כך שהוא יזהה כל שדה בנפרד לפי השם שלו (name) ויבצע את הפעולה רק פעם אחת לכל שדה. כך אפשר להוסיף כמה שדות מדיה בטופס, כולם יתמכו בהעלאה ע”י אורחים – בלי לקרוס ובלי בעיות.

הנה הגרסה המשופרת של הקוד:

add_action(
	'jet-form-builder/media-field/before-upload',
	function ( $parser ) {

		$context = $parser->get_context();

		// בדיקה אם יש קלאס בשם allow-insert-attachments
		$class_name = $context->get_class_name();

		if ( ! $class_name || strpos( $class_name, 'allow-insert-attachments' ) === false ) {
			return;
		}

		// בדיקה אם כבר טיפלנו בשדה הזה – מונע כפילויות
		static $configured_fields = [];

		$field_name = $context->get_name();

		if ( in_array( $field_name, $configured_fields, true ) ) {
			return;
		}

		// מאפשר העלאה גם לאורחים
		$context->allow_for_guest();

		// מגדיר שהערך שישמר יהיה מזהה הקובץ (ID)
		$context->update_setting( 'insert_attachment', true );
		$context->update_setting( 'value_format', 'id' );

		// מסמן שהשדה טופל
		$configured_fields[] = $field_name;
	}
);

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

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

0 0 votes
דירוג מאמר
Subscribe
Notify of
guest
0 הערות
Inline Feedbacks
View all comments
מדריכים ומאמרים קשורים
HeskeAgency-dev
שדרגו את שדה העלאת הקבצים בטופסי JetFormBuilder עם עיצוב מודרני, כפתורים אינטראקטיביים, בדיקת מגבלות קובץ ותוויות חכמות – קוד מוכן מתוך ערוץ YouTube של Heske Agency dev.
eliko.web.studio
רוצים להוסיף כפתור להעתקת קישור העמוד בלחיצה אחת – בלי תוספים ובלי קוד מסובך? במדריך הזה תלמדו איך לעשות את זה באלמנטור בצורה פשוטה ויעילה.
eliko.web.studio
מניעת העתקת תוכן באתר היא חיונית להגנה על זכויות יוצרים ושיפור אבטחת המידע. במדריך זה, נסביר כיצד ניתן לחסום העתקת טקסט ותמונות באתר באמצעות קוד PHP ו-JavaScript. נלמד כיצד למנוע קליק ימני, חסימת Inspect Element, הגבלת קיצורי מקלדת ועוד – הכל תוך שמירה על חוויית משתמש טובה.
eliko.web.studio
ניתן לשפר את חוויית המשתמש בעמוד התשלום באמצעות התאמת שדות: הסרה, שינוי והוספה. במדריך זה נלמד כיצד ליישם שינויים אלו בקלות בעזרת קוד PHP.
eliko.web.studio
רוצים למנוע ספאם באתר מבלי לפגוע בעיצוב? גלו כיצד להסתיר את סמל Google reCAPTCHA עם קוד CSS פשוט. הפתרון שישאיר את האתר שלכם מוגן ונקי תוך שמירה על עיצוב מושלם.
eliko.web.studio
ב-WooCommerce, כפתור “מעבר לסל הקניות” שמופיע לאחר הוספת מוצר לעגלה בדפי ארכיון יכול לעיתים לפגוע בחוויית המשתמש ובעיצוב האתר

תודה שאישרת את הצעת המחיר!

לא צויין כתובת מייל

סך תשלום ראשון (מקדמה) 30% מסכום העסקה הינו:

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

העברה בנקאית

בנק – ONE ZERO (18)
סניף – ראשי (001)
חשבון – 202003116
ע"ש – אליהו כהן

תשלום באפליקציות

bit/PayBox
במספר טלפון 0503528688