לפני כמה שבועות העלאתי ליוטיוב סרטון שמראה איך אפשר ליצור איזורים מוגבלים למשתמשים בעזרת כמה שורות קוד.
בסרטון הראנו איך אנחנו עושים את זה, מבלי להשתמש בתוסף, עבור עמודי פוסטים ועמודי ארכיון של פוסטים.
מי שפספס, אפשר לראות את הסרטון והמדריך המלא בקישור הזה – איך ליצור איזורים למשתמשים רשומים בלבד – חלק 1.
אז עברו כמה שבועות ואחד מחברי קהילת אלמנטור פנו אליי ושאלו איך אפשר לעשות את אותו הדבר רק עם עמודים ספציפיים בצורה אלגנטית.
הרמתי את הכפפה והקלטתי סרטון נוסף שמראה איך עושים את זה עם ACF, ויצירת שדות מיוחדים.
התקנת ACF על האתר
השלב הראשון בתהליך יהיה להגדיר שדה מיוחד מסוג True\False שאיתו נחליט האם העמוד נגיד למשתמש שאינו רשום או לא.
את זה נעשה בעזרת ACF או Jet Engine (אני כמו שאתם יודעים מעדיף את האופציה השניה, אבל הפעם נגוון).
נתקין את ACF שנקרא גם Advanced Custom Fields ונפעיל אותו באתר.
הגדרת שדה מיוחד (Custom Field) על עמודים באתר
לאחר שהתקנו את ACF, נעבור ללשונית Custom Fields החדשה שנוצרה לנו בפאנל הניהול ונגדיר את השדות כמו שמופיע בסרטון.
שלב 1 – הוא ליצור קבוצת שדות.
שלב 2 – יצירת שדה בתוך קבוצת השדות שיצרנו
חשוב! תעתיקו לצד את השם של השדה החדש שיצרתם (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 תגובות
זה מעולה
ממש תודה!!
היה מושלם אם היה אפשר גם להגביל לתפקידי משתמש מסויימים
ניסיתי להוסיף לקוד אבל לא עבד
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');
היי, שמח לראות שזה עוזר לך!
לגבי הגבלה של זה לסוגי משתמשים יש סרטון שעשיתי שמדבר על הוספת תפקיד ושילוב שלו בקוד בלינק הזה, תראה/י אם זה עוזר לך.
https://www.youtube.com/watch?v=Zo9r8vab7hU
בנוסף, בקוד שרשמת, אני רואה שרק הוספת current_user_can וצריך להוסיף סימן קריאה בהתחלה כדי לוודא שהמשתמש שיכול לעשות פעולת עריכה לפוסטים לא יקבל רידיירקט.
כלומר יותר לכיוון של
&& !current_user_can('edit_posts')
תודה רבה על התגובה.
לצערי הקוד לא עובד. עם סימן קריאה או בלעדיו.
אני אנסה מה שהצעת בלינק,
אבל הייתי מעדיפה לא להתקין ג'ט אנג'ין רק בשביל זה.
גם האפשרות לשלוט בעמוד שלם או פוסט או מוצר הרבה יותר טובה למקרים מסויימים.
חפשתי בגוגל תנאים שבודקים מה סוג היוזר וחוץ ממה שנסיתי לשלב כאן לא מצאתי עוד משהו.
אם יש לך פתרון אחר אשמח.
היי סרי,
פספסתי את התגובה פה אז עונה עכשיו.
אם עדיין רלוונטי ולא מצאת פתרון אחר, מוזמנת לשלוח לי מייל ואוכל לראות איך לעזור לך להתאים את הקוד לצורך שלך.
[email protected]