hooks בפלאגינים שלנו

רקע כללי

בוורדפרס משתמשים בשלוש סוגי הרחבות.

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

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

פעולה – משמש לצורך הפעלה של עיבוד או הצגה של תוכן.

הבדלים בין השלושה:

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

ישום בחבילות שלנו

Core_Loader

מטפל ברישום הפעולות והפילטרים. הפלאגינים מוסיפים את הפעולות והפילטרים באמצעות AddAction ו AddFilter.

AddAction

  1. מניח ששם הפונקציה כשם הפעולה.
  2. אם קיימת פונקציה בשם הפעולה בתוספת _wrap, הוא משתמש בה. המטרה היא ליצור מעטפת שמטפלת בפרמטרים וכד'.
  3. רושם את הפונקציה לרישום מרוכז בוורדפרס בהמשך.
public function AddAction( $hook, $component, $callback = null, $priority = 10, $accepted_args = 1 ) {
   if (!$callback) $callback = $hook;
   if (is_callable(array($component, $callback . "_wrap"))) $callback .= "_wrap";
   if ($this->debug) MyLog(__FUNCTION__ . " $hook");
   $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
}

Core_Shortcodes

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

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

בדומה לתוסף _wrap של הפעולות, התוספת _wrapper משתמש לשורטקודס.

דוגמא לאופן השימוש בפלאגינים

נדגים באמצעות הדף הראשי של פוקוס – focus_main.

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

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

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

מאחר ופעולה אינה מחזירה מחרוזת, נשתמש בפונקציות ob.

if ($operation) {
   $table_name = self::TableFromOperation( $operation );
   $args = self::Args( $table_name );
   ob_start();
   do_action($operation, $args);
   return ob_get_clean();
}

הפונקציה הראשונה, ob_start, מכריזה שכל הפלט מרגע זה, יאגר במחרוזת פנימית. הפונקציה השנייה, ob_get_clean, מחזירה אל הפונקציה שלנו את הפלט שהצטבר.

כתיבת תגובה

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