מה הבעיה?
תחשבו על זה שיש לכם אתר עם כמה משתמשים שמפרסמים פוסטים \ תוכן באתר שלכם,
ואתם רוצים לתת להם גישה דרך טופס של JetFormBuilder לערוך את תוכן הפוסט,
והם פשוט יוכלו להיכנס לכל פוסט ולערוך אותו גם אם הוא פוסט של אחרים!!!
נוכל אפילו להפחיד ולהגיד שזה יכול לגרום לכאב ראש עצום לבעל האתר שיכול לאבד שילטה על המשתמשים והגבלת היכולת עריכה שלהם באתר…
אז תגידו לי – מה הבעיה?
תן תנאים דינמיים כך שאם המשתמש הוא לא מחבר הפוסט הנוכחי אז כל הטופס של ג'ט יעלם והוא לא יוכל לערוך!
כמו בתמונה:
ואני אשיב לכם:
זה יפה, אבל עריכה באמצעות טופס אפשרית גם בעוד דרכים, כגון: בעמוד אחר כמו דף "edit-post" שאנחנו נקים, ונחזיר בפרמטר בקשה את הid של הפוסט שאותו נרצה לערוך:
/edit-post/?post_id=1234
בעמוד הזה כמובן נכניס טופס ששואב בצורה דינמית דרך פרמטר הבקשה את כל נתוני הפוסט ומעדכן אותם בלחיצה על הכפתור בטופס!
הבעיה היא – שאני (או כל משתמש עם יכולות עריכה) יכול לשנות את ה id בפרמטר בקשה, והופ! הוא יכול לערוך גם את של האחרים!
ואיך אני המתכנת \ בונה האתר יכול בכלל לתת תנאי דינמי שיזהה שה id שמוחזר מפרמטר הבקשה 'post_id' הוא באמת אחד מהפוסטים שהמשתמש הנוכחי חיבר ורק אז הוא יציג לו את הטופס ורק הוא יוכל לערוך את הפוסט ולא כל משתמש אחר?
כשהבנו את הבעיה אז
הפתרון הוא
ליצור שאילתה בבונה השאילתות הנפלא (Query Builder) של JetEngine עם השאילתה אנו נבדוק האם הid של הפוסט שמופיע בפרמטר הבקשה שבשורת הכתובת הוא באמת פוסט שהמשתמש הנוכחי חיבר, ואז בתנאים דינמיים אנו נציג את הטופס של ג'ט וניתן לו לערוך את הפוסט שלו.
ככה עושים:
נפתח את בונה השאילתות JetEngine > Query Builder, וניצור שאילתה חדשה,
השאילתה תהיה כמובן שאילתת פוסטים:
בשאילתה נגדיר שלוש הגדרות,
האחת – איזה סוג פוסטים אנחנו רוצים לערוך ובאיזה סטטוס יהיו הפוסטים הניתנים לעריכה,
ב Posts Query ניכנס ל General ובהגדרת Post Type נבחר את סוג הפוסטים שאליהם יהיו שייכים הפוסטים שאנו עורכים דרך הטופס שלנו.
בהגדרת Post Status נגדיר Any, שזה: כל סטטוס, אלא אם כן הצרכים של האתר אומרים אחרת…
2 – נזהה את ה id של הפוסט שמוחזר מפרמטר הבקשה שהגדרנו, במקרה שלנו 'post_id'
נעבור ללשונית צד 'Post & Page' ובהגדרת 'Post In' נבחר בתנאים הדינמיים בערך הדינמי: Query Variable, ונלחץ על "Apply"!
ההגדרה האחרונה היא – לזהות שהמחבר הנוכחי הוא מחבר הפוסט שה id שלו מופיע בפרמטר הבקשה שהגדרנו.
נעבור ללשונית הצד: Author, ושם בהגדרה Author ID נבחר שוב בתנאים הדינמיים ובערך הדינמי: Current user ID
וסיימנו את שלב הגדרת השאילתה.
נעבור לעורך אלמנטור נתפוש את הטופס ג'ט שאנו רוצים להחיל עליו את התנאי הדינמי עם השאילתה שלנו או את הקונטיינר שמכיל את הטופס הזה,
נפתח במתקדם > Dynamic Visibility, ונגדיר כך:
Show element if condition met (הצג את האלמנט אם)
ובבחירה Condition נבחר בערך: "Query Has Items",
עכשיו באפשרות הנוספת שנפתחה: Query to check נבחר בשאילתה שלנו (במקרה שלנו זה "תערוך רק את שלך!")
וזהו! עכשיו הטופס / קונטיינר יופיע רק אם המשתמש הנוכחי הוא מחבר הפוסט שהוא עורך!
טיפ: ב "Condition" תוכלו לתת תנאי הפוך "Query Has Not Items" ולהציג הודעה נחמדה כגון: "אתם מנסים לערוך פוסט שלא חובר על ידכם!"
טיפ נוסף: אם יש לכם משתמש על שאתם רוצים לתת לו בכל זאת לערוך פוסטים של אחרים, תוכלו להגדיר תנאי נוסף שייתן הרשאה אם המשתמש הוא 'מחבר הפוסט' 'או (or)' הוא משתמש עם 'תפקיד' כמו "מנהל (Administrator)" או כל תפקיד אחר… ראו תמונה:
בהצלחה! 😀






