מתחת למנוע של Widgets API

שתפו:

Share on facebook
Share on google
Share on twitter
Share on linkedin

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

אמרתי לעצמי This Is War (סתםםם).

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

  • חיפוש
  • פוסטים אחרונים
  • קטגוריות
  • כל מידע אחר אפילו חיצוני

אם אנחנו משתמשים בתוסף העוצמתי Advance Custom Fields
(99.9% שכן) או אפילו עם תוסף בונה הדפים Elementor, רמת הגמישות עולה כמה דרגות.
במצב כזה או שיהיה לנו סוג של תוסף וידג'ט תבנית שנמחזר לשימוש שלנו כל פעם או שניצור חדש לשימוש הספציפי. בכל מקרה זאת עבודה שאותי לפחות עיצבנה והחלטתי שזה האתגר הבא.
אני רוצה ליצור דרך מהירה ונוחה ליצור כמה וידג'טים שאני רוצה בצורה קלה ומהירה בלי להתעסק עם אותו קוד כל פעם ולדאוג רק למידע המוצג.

איך וידג'ט נרשם במערכת?

כל פעם שאנחנו רוצים לרשום ווידג'ט במערכת אנחנו משתמשים בפונקציה בשם register_widget שמקבלת את שם הקלאס שאחראי על הוידג'ט שלנו בתור פרמטר.
הבעיה: אין שום אופצייה לגמישות ואני לא מתכוון לייצר קלאסים מ-1 עד 1,000,000.
הפיתרון: לצלול לפנים !

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

לא יודע מה איתכם אבל מה שישר הקפיץ לי את העין בקוד זה הקריאה למתודה $this->hash_object

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

לפונקציה יש תמיכה כבר תקופה ארוכה ב- php, אני יכול לנחש שהקוד "האחר" הוא מתקופה שלפני הפונקציה הנוכחית. אז אני בחזרה במשחק !

אז למעשה כדי ליצור פונקצייה או מתודת הרשמה משלי אני יכול לעשות משהו כזה:

 

הרעיון, מתחילים

הרעיון ליצור מנגנון פשוט שיכול לרשום וידג'טים במערכת בצורה פשוטה, לצורך העניין אני אשתמש ב- Custom Post Type. כמו שאמרנו עצלן אז CPT בקיצור רב

הרשמה של כל הוידג'טים/פוסטים

דרך הוק widgets_init נשתמש "ברעיון" לרשום וידג'טים באופן דינמי על סמך אותו קלאס בסיסי שנגדיר עוד מעט.

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

קלאס הוידג'טים שלנו

ננגדיר קלאס וידג'ט בסיסי שבתוך ה- constructor שלו הוא יוגדר בצורה יחודית לפי הכותרת של הפוסט והתוכן של הפוסט יהיה התיאור שלו.

כמעט חצי שעה אני מנסה להכניס את הקוד של הכותרת של הוידג'ט וכל הפוסט נדפק, כנראה בגלל מיקס של html ו- php.
אז איפה שכתוב "PRINT WIDGET TITLE HERE" תחליפו עם הקוד הרלוונטי בדוגמה בעמוד הבא: Widgets API

במקרה ששמתם לב במתודה שדואגת להדפיס את התוכן בווידג'ט השארתי רק הדפסה של הכותרת, והגדרתי טריגר להוק שבוא נוכל להדפיס את המידע שלנו על סמך פרמטרים שהחשוב בהם הוא ה- widget_id.
לדוגמה הדפסה של מידע לשימוש עם Advance Custom Fields

תוצאה סופית

מקווה שנהניתם, אשמח לתגובות.

יהודה חסין

יהודה חסין

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

יהודה חסין

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

מאמרים אחרונים

קטגוריות

Post SMTP Mailer / Email Log
Post SMTP Mailer / Email Log
קראו את הפוסט הקודם:
מסך עם קוד
Case Study: Hacking Metadata API

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

סגור