הסתרת סקשיין אם לא הוזן שדה ACF

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

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

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

הווידגט.

אז איך פותרים את הבעיה?

בכל ווידגט שאנחנו רוצים שלא יודפס במידה ולא הוזן תוכן בשדה, נכניס קלאס ל section העוטף (תחת לשונית מתקדם) "show-if-acf-fieldname" שאת fieldname נחליף בשם השדה ACF שלנו.
לדוגמה: show-if-acf-address (לשדה שקראנו לו בשם address)
כתבנו קוד מערכתי שמוסיפים ל functions.php שבודק בכל אלמנט אם יש קלאס בשם show-if-acf ובודק מה שם השדה שמוזן אחריו, אחרי שיש לנו את שם השדה, אנו בודקים אם הוא מלא (האם מוזן בו איזשהו ערך)
והמידה ולא מוזן שום ערך,הווידגט הספציפי לא ירונדר (לא יוצג).

// hide section/widget depends on acf field
function get_elementor_element_classes($element){
	$classes = 'widget' == $element->get_type() ? $element->get_settings('_css_classes') : $element->get_settings('css_classes');
	return $classes;
}
function is_string_contains($string,$substing){
	$is_contains = $string && strpos($string, $substing) !== false;
	return $is_contains;
}
add_action( 'elementor/frontend/widget/should_render','lenix_elementor_hide_if_acf',10,2);
add_action( 'elementor/frontend/section/should_render','lenix_elementor_hide_if_acf',10,2);
function lenix_elementor_hide_if_acf($should_render, $element){
	
	$classes = get_elementor_element_classes($element);
	$is_depends = is_string_contains($classes,'show-if-acf');
	if(!$is_depends || !function_exists('get_field')){
		//var_dump($classes);
		return $should_render;
	}
	
	if($is_depends){
		$classes = explode(' ',$classes);
		foreach($classes as $class){
			if(strpos($class, 'show-if-acf') !== false){
				$acf_to_check = str_replace('show-if-acf-','',$class);
				if(!get_field($acf_to_check)){
					return false;
				}
			}
		}
	}
	
	return $should_render;
	
}

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

 

משה פשיטיק

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

לפוסט הזה יש 3 תגובות

  1. אחרי העדכון של הקוד כך שיתאים גם להסתרת וידג'טים מופיעה שגיאה בניסיון עדכון הפונקציה
    https://snag.gy/ZdMO8W.jpg

  2. עובד מעולה…
    במידה ומישהו מסתבך עם זה (למרות שאני בספק שיש איך), יש תוסף שעושה את אותה פעולה

כתיבת תגובה

סגירת תפריט

השארו מעודכנים!

הרשמו עכשיו וקבלו כל מאמר חדש ישר למייל!