מה זה Filters וActions בוורדפרס? הכל על Hooks [חלק א'] - React to WordPress
וורדפרס - מה זה Actions וHooks

מה זה Filters וActions בוורדפרס? הכל על Hooks [חלק א']

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

כל אחד מהHooks יש לו תפקיד משלו, במדריך הקצרצר הזה, אסביר מה זה Actions, מה זה Filters, איך משתמשים בהם, איך יוצרים אותם, למה הם שימושיים, וכמובן – מה ההבדל בין Actions לFilters. כאן נעבור על הHooks שוורדפרס מציע, אבל כמעט כל תוסף ותבנית, מבצעים שימוש בלפחות Action או Filter אחד.

מה זה Action Hook ואיך לממש אותו?

add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );

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

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

hook_name – שם הhook\action שאנחנו מתחברים אליו.

your_function_name – שם הפונקציה שאנחנו יוצרים וקוראים לה. הפונקציה הזאת היא שתבצע את הפעולה.

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

accepted_args – הפרמטרים שהdo_action(שמוסבר מטה) מעביר לפונקציה שלנו. אפשר להשאיר ריק במידה ואין שום פרמטרים שמועברים אליכם או שאתם לא רוצים לבצע בהם שימוש.

בפעולה שלנו, אנחנו נבצע שימוש בכל 4 הפרמטרים שהadd_action מקבל, בצורה הבאה:

add_action( 'pre_post_update', 'your_callable_function', 10, 2 );
function your_callable_function( $post_id, $post_data ) {
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
        return;

    $subject = "Post ($post_id} updated!";
    $message = "Post with the title: {$post_data['post_title']} has been updated!";

    wp_mail( get_option( 'admin_email' ), $subject, $message );
}

בקוד למעלה, התחברנו לpre_post_update – זהו אקשן שנותן לנו לבצע פעולה(אקשן) כאשר הפוסט מעודכן.

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

האקשן pre_post_update מעביר לפונקצייה שלנו 2 פרמטרים, הראשון post_id – האיידי של הפוסט, השני, מערך(array) של data – כל הנתונים של הפוסט(post_title, post_author, post_content וכו').

אנחנו לוקחים את הפרמטרים שקיבלנו, ויוצרים 2 משתנים, הראשון $subject שהוא בעצם הנושא של המייל שיכיל את ה-$post_id שקיבלנו, והפרמטר השני הוא $message, התוכן של המייל שלנו, שיכיל בתוכו $post_data['post_title'] – הכותרת של הפוסט.

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

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

איך ליצור ACTION HOOK?

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

do_action( string $tag,  $arg = '' )

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

$tag – שם האקשן שאנחנו יוצרים, אליו יתחברו הפונקציות שמבצעות את הפעולה, ה-hook_name בadd_action.

$arg – הפרמטרים שאנחנו מעבירים לפונקציה שמתחברת לאקשן שיצרנו. הaccepted_args של הadd_action. יכול להיות array, string, integer וכו'. אפשר להעביר מספר פרמטרים בצורה כזאת:

do_action( 'hook_name",  $param1, $param2, $param3, $param4 = array( '1', '2' ) )

וכך משתמשים בה:

function send_mail_to_connected_user( $title, $message ) {
   if ( ! is_user_logged_in() ) {
       return null;
   }

   $get_user = wp_get_current_user();

   do_action( 'send_mail_to_connected_user_action', $title, $message );

   wp_mail ( $get_user->user_email, $title, $message );
}

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

את הבדיקה אם משתמש מחובר, מבצעים בעזרת is_user_logged_in() שמחזיר true/false. לאחר מכן, מקבלים את כל האובייקט של המשתמש המחובר בעזרת הפונקציה wp_get_current_user().

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

send_mail_to_connected_user_action

ולהעביר לו את הנתונים של $title ו$message.

כאן יצרנו hook משלנו, שנותן לכל אדם אחר את האפשרות להתחבר לפונקציה שלנו, מרחוק, ולבצע כל פעולה שרק ירצו, כולל לקבל את הנתונים שקיבלנו מלכתחילה שהם $title ו$message.

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

add_action( 'send_mail_to_connected_user_action', 'your_callable_function', 10, 2 );
function your_callable_function( $sent_title, $sent_message ) {
    $title = "Mail sent to user";
    $message = "Mail title: $sent_title, Mail content: $sent_message";

    wp_mail( get_option('admin_email'), $title, $message);
}

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

לסיכום, זהו כלי שסביר להניח השתמשתם בו עד היום, אבל לא הבנתם ב100% מה הם עושים. מקווה שיכולתי להעביר לכם בדיוק למה, איך, ומתי אפשר להשתמש בadd_action() וdo_action(). בחלק הבא, נעבור על פונקציות לא פחות חשובות, והן add_filter() וapply_filters().

More about: Best WordPress web hosting 2019  

כתיבת תגובה

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