ברוכים הבאים ל-LEMON!

קהילת LEMON הוקמה במטרה לשתף קטעי קוד (CSS, JS, PHP) ומדריכים שימושיים בין בוני אתרים באלמנטור.
באתר תוכלו למצוא מגוון קטעי קוד שונים שתוכלו לשלב באתרים שלכם. בנוסף, יעלו לאתר מדריכים מתקדמים בנושא אלמנטור, כלים ותוספים שקשורים לאלמנטור, ועוד מגוון מדריכים בנושא בניית אתרים.

הרשמו לניוזלטר

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

קבוצת LEMON בפייסבוק

אתם מוזמנים להצטרף!

איך ליצור איזורים למשתמשים רשומים בלבד מבלי להשתמש בתוספים – חלק 2

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

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

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

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

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

התקנת ACF על האתר

השלב הראשון בתהליך יהיה להגדיר שדה מיוחד מסוג True\False שאיתו נחליט האם העמוד נגיד למשתמש שאינו רשום או לא.

את זה נעשה בעזרת ACF או Jet Engine (אני כמו שאתם יודעים מעדיף את האופציה השניה, אבל הפעם נגוון).

נתקין את ACF שנקרא גם Advanced Custom Fields ונפעיל אותו באתר.

הגדרת שדה מיוחד (Custom Field) על עמודים באתר

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

שלב 1 – הוא ליצור קבוצת שדות.

(יצירת קבוצת שדות ב-ACF)

שלב 2 – יצירת שדה בתוך קבוצת השדות שיצרנו

(יצירת שדה בתוך קבוצת השדות שיצרנו עם ACF)

חשוב! תעתיקו לצד את השם של השדה החדש שיצרתם (Field Name), נצטרך את זה בהמשך.

הגדרת סטאטוס השדה בדף הבית

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

(סימון סטאטוס בעמוד)

יצירת עמוד "גישה מוגבלת"

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

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

חשוב לשמור בצד את ה-SLUG (כתובת) של אותו עמוד על מנת להכניס בקוד שנדביק בהמשך.

הוספת קוד ל-functions.php

הדבר האחרון שנשאר הוא להוסיף את קטע הקוד הבא לקובץ functions.php שלנו.

נעתיק את הקוד ונדביק אותו בתבנית (שימו לב שאתם עובדים עם תבנית בת).

function dorshiff_restrict_post_by_metafield() {
	$post_id = get_queried_object_id();

	if (get_post_meta( $post_id, 'METAFIELD_NAME', true ) && !is_user_logged_in()) {
		wp_redirect(get_site_url() . '/access-denied/'); 
		exit;
	}
}

add_action('template_redirect', 'dorshiff_restrict_post_by_metafield');Code language: PHP (php)
  • איפה שכתוב "METAFIELD_NAME" – נחליף ב-Field Name ששמרנו בצד כאשר יצרנו את השדה שלנו.
  • איפה שכתוב "access-denied" – נחליף ב-SLUG של העמוד "גישה חסומה".

לאחר מכן, שומרים את הקובץ ומרעננים את ה-cache באתר.

סיכום ובדיקות

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

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

במידה ועשיתם את כל התהליך בצורה תקינה, ננותב לעמוד access denied.

העתקת קישור

מוזמנים לשאול בפייסבוק!

4 תגובות

  1. זה מעולה
    ממש תודה!!
    היה מושלם אם היה אפשר גם להגביל לתפקידי משתמש מסויימים
    ניסיתי להוסיף לקוד אבל לא עבד

    function dorshiff_restrict_post_by_metafield() {
    $post_id = get_queried_object_id();

    if (get_post_meta( $post_id, 'access_status', true ) && !is_user_logged_in() && current_user_can('edit_posts') ) {
    wp_redirect(get_site_url() . '/access-denied/');
    exit;
    }
    }

    add_action('template_redirect', 'dorshiff_restrict_post_by_metafield');

  2. היי, שמח לראות שזה עוזר לך!

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

    https://www.youtube.com/watch?v=Zo9r8vab7hU

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

    כלומר יותר לכיוון של

    && !current_user_can('edit_posts')

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

  3. היי סרי,

    פספסתי את התגובה פה אז עונה עכשיו.

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

    [email protected]

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

לשאלות / בקשות / בעיות / כל דבר אחר… צרו איתנו קשר :)

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

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