הפרדת תוכן למשתמשים רשומים

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

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

גישת הכל או קצת

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

if( is_user_logged_in())
	the_content(); 
else {
	the_excerpt();	 ?>
	 
אתה חייב להרשם או להתחבר על מנת לקרוא את שאר התוכן בעמוד.
< ?php }

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

גישת הפעם ככה ופעם ככה

לפעמים אנחנו לא רוצים לחסום את כל הבלוג אבל כן להחליט שפוסט או עמוד ספציפיים יוצגו רק למשתמש רשום. כאמור, וורדפרס לא מאפשרת לסמן פוסט כמיועד למשתמשים רשומים בלבד (יש מספר תוספים שמתעסקים בהרשאות ויצירת קבוצות כגון User Access Manager שהיא קצת אוברקיל בשביל זה) אבל אפשר לעקוף את הדרישה הזו יחסית בקלות על ידי שימוש בשדות מיוחדים.
לצורך הדוגמא, ניצור בפוסט שדה מיוחד חדש שנקרא registered ונעניק לו את הערך 1 עבור פוסטים שאנחנו מעוניינים לשריינם למשתמשים רשומים בלבד. (אין צורך להגדיר ערך 0 בפוסטים פתוחים שכן הפונקציה תבדוק רק אם הערך שווה ל 1 ועבור שדה ללא ערך חוזר הערך 0). עכשיו נכניס בקבצי העיצוב, בכל מקום שמופיע the_content את קטע הקוד הבא:

$key = “registered”;
$is4registered = get_post_meta($post->ID, $key, true);
if(($is4registered==1 && is_user_logged_in()) || !$is4registered==1)
	the_content(); 
else {
	the_excerpt();	 ?>
	 
אתה חייב להרשם או להתחבר על מנת לקרוא את שאר התוכן בעמוד.
< ?php }

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

עבודה עם קטגוריות

אפשר לבחור קטגוריות ספציפיות שיהיו קטגוריות "מוגנות" למשתמשים רשומים בלבד, גם כאן, עבור הפוסטים בקטגוריה המוגנת נרצה להציג תקציר לאורח ותוכן למשתמש מחובר. למעשה, על ידי השיוך לקטגוריה אנחנו חוסכים לעצמנו את העבודה עם שדות מיוחדים כמו בגישת ה"ככה ככה" אך הרעיון הוא זהה. יוצרים קטגוריה חדשה ורושמים את המספר שלה. אפשר לקדם אותה בעמוד הראשי תחת רשימת הקטגוריות או לחילופין, להסתיר אותה ברשימה באמצעות wp_list_categories('exclude=X'); כאשר X מסמן את מספר הקטגוריה המיוחדת.
מעכשיו, כל פוסט שנרצה להגן עליו נשייך אותו אל הקטגוריה המוגנת ונעשה עליו בדיקת שייכות באמצעות הפונקציה in_category שבודקת אם הפונקציה משוייכת לקטגוריה ספציפית - לצורך קטע הקוד, נניח שהמזהה של הקטגוריה המוגנת הוא 5.

if((in_category( '5' ) && is_user_logged_in()) || !in_category( '5' ))
	the_content(); 
else{
	the_excerpt();	 ?>
	 
אתה חייב להרשם או להתחבר על מנת לקרוא את שאר התוכן בעמוד.
< ?php }

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

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

if( is_user_logged_in()) 
	the_content(); 
else {
	the_excerpt();	 ?>
	 
אתה חייב להרשם או להתחבר על מנת לקרוא את שאר התוכן בעמוד.
< ?php }

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

הורדה למשתמשים רשומים
הורדה למשתמשים רשומים
גישת הערך המוסף

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

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

$key = “download”;
$somethingToDonload = get_post_meta($post->ID, $key, true);
if($somethingToDonload && is_user_logged_in()) {
	?> < ? }
else if ($somethingToDonload && !is_user_logged_in()){
	?>< ?php }

בשורה שלוש אנחנו בודקים אם יש תוכן לשדה המיועד ללינק ההורדה ואם המשתמש הוא רשום - אם כן, יוצג לו אזור ההורדה הכולל לינק. אם יש תוכן לשדה הלינק אבל המשתמש אינו מחובר הוא יקבל בקשת התחברות / הרשמה על מנת לקבל גישה לקובץ. כמובן שבמקרים בהם אין קובץ להורדה (הערך ב somethingToDonload חזר ריק) לא יוצג כלום.

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

לדרג את הפוסט
0

Comments

8 תגובות על “הפרדת תוכן למשתמשים רשומים”

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

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

  2. שאלה

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

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

    המערכת תבדוק שוב אם יש לו הרשאה או שתציג בפניו את התוכן (המסחרי האיכותי שלי) ?

    1. בפוץ התכוונתי לאנשים ששמים את כל האתר שלהם מאחורי יוזר וסיסמא ומכריחים אותך להרשם לפני שאתה בכלל יודע מה יש באתר. אני מקווה מאוד שאתה לא כזה 🙂

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

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

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

  4. תמונת פרופיל של דניאל
    דניאל

    ומה לגבי נעילת כל האתר למשתמשים בלבד? (כן, ידוע שגוגל לא יוכל לקרוא אותו)

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

      1. תמונת פרופיל של דניאל
        דניאל

        אין משהו מובנה?
        כלומר יכולת לסגור את כל האתר למשתמשים רשומים בלבד?

        אני רוצה לנצל את האתר בתור מערכת ידע פנימית… בלי גישה מבחוץ.

        ואם כבר ניצן, אז שאלה שלא קשורה – אבל אולי אתה מכיר :

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

כתיבת תגובה

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