רשימת ההוקים של ווקומרס למפתחי תוספים וערכות נושא לצורך הוספת פונקציות
רשימת ההוקים של ווקומרס למפתחי תוספים וערכות נושא לצורך הוספת פונקציות
רשימת ההוקים של ווקומרס למפתחי תוספים וערכות נושא לצורך הוספת פונקציות
בשיעור הזה אני לא רק זורק עליך רשימת hooks של WooCommerce, אלא מלמד אותך איך לקרוא hook, איך להבין אם מדובר ב-action או filter, איך לבחור hook נכון למשימה שלך, ואיך להוסיף פונקציות בלי לשבור תבניות, core או עדכונים. ברגע שתבין את השיטה, תוכל להוסיף פונקציונליות לחנות במקום הנכון ובזמן הנכון, בין אם אתה מפתח child theme, plugin פרויקטלי או הרחבה מסחרית.
מהו hook ולמה WooCommerce בנויה סביבו
WooCommerce יושבת על ה-hook system של WordPress, ולכן כמעט כל התאמה רצינית עוברת דרך actions או filters. Action מאפשר לך להזריק לוגיקה או HTML בנקודה מסוימת בתהליך, בעוד filter מאפשר לך לקבל ערך, לשנות אותו ולהחזירו. אם תבין את שני המנגנונים האלה לעומק, תוכל לבצע התאמות בלי לגעת בקבצי core ובלי להעתיק template מלא אם אין צורך.
- Action: לבצע משהו, להדפיס משהו, להפעיל תהליך.
- Filter: לשנות ערך קיים ולהחזיר אותו.
- Priority: לקבוע מי רץ קודם ומי מאוחר יותר.
- Accepted args: להגדיר כמה פרמטרים הפונקציה שלך מקבלת.
ההבדל המעשי בין action ל-filter
אני אוהב ללמד את זה כך: אם אתה רק רוצה להוסיף בלוק הודעה לפני checkout, כנראה שאתה צריך action. אם אתה רוצה לשנות טקסט של כפתור, כנראה שאתה צריך filter. הנה שתי דוגמאות שמחדדות את ההבדל:
<?php
/**
* דוגמה בסיסית ל-action ב-WooCommerce.
*
* Author: pablo rotem
*/
function pablo_rotem_show_notice_before_checkout_form(): void {
echo '<div class="woocommerce-info">משלוח מהיר זמין רק לחלק מהאזורים.</div>';
}
add_action( 'woocommerce_before_checkout_form', 'pablo_rotem_show_notice_before_checkout_form', 15 );<?php
/**
* דוגמה בסיסית ל-filter ב-WooCommerce.
*
* Author: pablo rotem
*/
function pablo_rotem_change_add_to_cart_text( string $text, $product ): string {
if ( $product && $product->is_type( 'simple' ) ) {
return 'להוספה מיידית לעגלה';
}
return $text;
}
add_filter( 'woocommerce_product_single_add_to_cart_text', 'pablo_rotem_change_add_to_cart_text', 10, 2 );ברגע שאתה מתחיל לחשוב בצורה הזו, הרבה יותר קל למצוא hook נכון במסמכים הרשמיים ובקוד המקור.
משפחות הוקים חשובות שכל מפתח WooCommerce צריך להכיר
במקום לנסות לזכור מאות hooks בעל פה, חלק אותם לאזורים פונקציונליים. זו שיטה שאני מלמד תלמידים כי היא הרבה יותר יעילה.
1. עמוד מוצר
woocommerce_before_single_productwoocommerce_single_product_summarywoocommerce_after_single_product_summary
2. ארכיון חנות וקטגוריות
woocommerce_before_shop_loopwoocommerce_after_shop_loop_item_titlewoocommerce_after_shop_loop_item
3. סל וקופה
woocommerce_before_cartwoocommerce_before_checkout_formwoocommerce_checkout_fields
4. הזמנות ומיילים
woocommerce_checkout_create_orderwoocommerce_email_order_meta_fieldswoocommerce_admin_order_data_after_billing_address
אם תעבוד לפי משפחות, תוכל לצמצם חיפוש בצורה דרמטית.
איך לבחור priority נכון ולא להילחם בתבנית
הוק לבד לא מספיק. אתה גם צריך להבין priority. לדוגמה, אם התבנית או WooCommerce כבר מחברות כמה callbacks ל-woocommerce_single_product_summary, priority יקבע אם התוכן שלך יופיע לפני הכותרת, אחרי המחיר או לפני הכפתור.
<?php
/**
* הוספת תוכן ללשונית סיכום מוצר.
*
* Author: pablo rotem
*/
function pablo_rotem_add_text_after_product_title(): void {
echo '<p class="pablo-product-note">התאמה אישית זמינה להזמנות בכמות גדולה.</p>';
}
add_action( 'woocommerce_single_product_summary', 'pablo_rotem_add_text_after_product_title', 7 );טכניקה טובה היא לבדוק קודם במסמכים או בקוד אילו callbacks כבר יושבות על אותו hook, ואז לבחור priority מושכל במקום לנסות מספרים אקראיים.
הסרה והחלפה של callbacks קיימות
בחלק מהפרויקטים לא מספיק להוסיף. צריך גם להסיר ברירת מחדל ולהחליף אותה. זה אחד הכלים החשובים ביותר בפיתוח WooCommerce נקי, כי הוא מאפשר התאמה עמוקה בלי override כבד של template.
<?php
/**
* הסרת callback קיימת והחלפתה בחדשה.
*
* Author: pablo rotem
*/
add_action( 'init', function (): void {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
add_action( 'woocommerce_single_product_summary', 'pablo_rotem_custom_meta_block', 40 );
} );
function pablo_rotem_custom_meta_block(): void {
echo '<div class="pablo-meta-box">כאן אפשר להציג מטא מותאם או תוכן שיווקי.</div>';
}הזהירות כאן חשובה: remove_action יעבוד רק אם אתה מכיר את שם הפונקציה, ה-hook וה-priority המקורי. לכן תמיד בדוק מקור או reference לפני ההסרה.
איך למצוא hook נכון בלי לאבד זמן
אני מציע לעבוד בארבע תחנות: 1) לבדוק reference רשמי, 2) לבדוק תבנית או קובץ מקור, 3) לבדוק accepted args, 4) לכתוב snippet מינימלי לבדיקה. זו השיטה הכי מהירה שאני מכיר למציאת hook אמין.
- חפש ב-WooCommerce Hook Reference.
- אם צריך, פתח את קובץ התבנית וחפש
do_actionאוapply_filters. - בדוק כמה פרמטרים עוברים ל-hook.
- נסה callback זמני שמדפיס סימון ברור.
כך אתה לא עובד על זיכרון ולא מסתמך על פוסטים ישנים באינטרנט שאולי כבר לא רלוונטיים לגרסה הנוכחית.
שיטת דיבוג בטוחה בזמן פיתוח
במקום לשנות עיצוב מלא כדי להבין אם hook רץ, אפשר להתחיל עם marker קטן למנהלים בלבד. כך אתה מאשר שה-hook באמת מופעל במקום הנכון ואז מתקדם לקוד האמיתי.
<?php
/**
* Callback זמני לבדיקה מהירה של hook.
*
* Author: pablo rotem
*/
function pablo_rotem_debug_hook_marker(): void {
if ( current_user_can( 'manage_options' ) ) {
echo '<!-- pablo_rotem_debug_hook_marker -->';
}
}
add_action( 'woocommerce_after_shop_loop_item_title', 'pablo_rotem_debug_hook_marker', 99 );אחרי שאישרת את המיקום, מחליפים את ה-marker בפונקציה אמיתית. זה חוסך הרבה זמן כשהתבנית או builder מוסיפים שכבות מורכבות.
מתי לבחור hook ומתי override לתבנית
כאן הרבה מפתחים טועים. ברירת המחדל שלי היא hook קודם, override רק אם אין ברירה. למה? כי hooks נשברים פחות בעדכונים, דורשים פחות תחזוקה, ומאפשרים לשמור את מבנה התבנית המקורי. Template override אני שומר למצבים שבהם צריך לשנות markup בצורה עמוקה מאוד או להסיר מבנה שלם שאין לו hooks מתאימים.
כלומר: אל תקפוץ ישר ל-copy של template. קודם בדוק אם action, filter או remove_action נותנים לך את אותה תוצאה בצורה קלה ובטוחה יותר.
סיכום
רשימת hooks היא רק נקודת פתיחה. היכולת האמיתית של מפתח WooCommerce היא להבין מתי להשתמש ב-action, מתי ב-filter, איך לבחור priority, איך לאתר hooks קיימים ואיך להימנע מ-template overrides מיותרים. זו הדרך לבנות חנויות שנשארות יציבות גם אחרי עדכונים.
