חיפוש

הוספת עמודות חדשות לעמוד ההזמנות של ווקומרס

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

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

ההוקים בפוסט זה מיועדים לטבלת ההזמנות בעמוד החשבון שלי (My Account) בצד הלקוח, והם עובדים ללא שינוי גם עם HPOS (High-Performance Order Storage). ההוקים של טבלת ההזמנות בצד הניהול (Admin) הם שונים לחלוטין.

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

עמוד ההזמנות של ווקומרס ללא עמודת משלוח

עמוד ההזמנות של ווקומרס ללא עמודת משלוח

הוספת העמודה לטבלה

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

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

הצעד הראשון הוא להשתמש בפילטר זה על מנת להוסיף את העמודה שאנו רוצים.

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

/**
 * Adds a new column to the "My Orders" table in the account.
 *
 * @param string[] $columns the columns in the orders table
 * @return string[] updated columns
 */
function sv_wc_add_my_account_orders_column( $columns ) {

    $new_columns = array();

    foreach ( $columns as $key => $name ) {

        $new_columns[ $key ] = $name;

        // add ship-to after order status column
        if ( 'order-status' === $key ) {
            $new_columns['order-ship-to'] = __( 'Ship to', 'textdomain' );
        }
    }

    return $new_columns;
}
add_filter( 'woocommerce_account_orders_columns', 'sv_wc_add_my_account_orders_column' );

לאחר הוספת קוד זה ל functions.php נראה את העמודה שהתווספה לעמוד ההזמנות כפי שרצינו:

עמוד ההזמנות של ווקומרס לאחר הוספת עמודת משלוח ריקה

עמוד ההזמנות של ווקומרס לאחר הוספת עמודת משלוח ריקה

אכלוס העמודה בתוכן

אך לא סיימנו עדיין. אנו צריכים להוסיף את המידע לעמודה זו ולדאוג שיופיע בכל שורת הזמנה.

הפעולה (action) הנקראית woocommerce_my_account_my_orders_column_{$column_id} מאפשרת לנו לאכלס את העמודה שזה עתה הוספנו בתוכן שאנו בוחרים. היא מעבירה את אובייקט ההזמנה, כך שנוכל לשלוף ממנו כל מידע שנרצה.

מזהה העמודה או במילים אחרות ה $column_id בהוק זה יהיה מפתח המערך שהוספנו בסניפט הקודם, (ship-to) במקרה שלנו.

נשתמש בסדר שהתקבל על מנת להציג את המידע בעמודה הרצויה. ווקומרס מספקת מתודה שימושית להדפסת הכתובת בצורה הראויה על המסך:

/**
 * Adds data to the custom "ship to" column in "My Account > Orders".
 *
 * @param WC_Order $order the order object for the row
 */
function sv_wc_my_orders_ship_to_column( $order ) {

    $formatted_shipping = $order->get_formatted_shipping_address();
    echo ! empty( $formatted_shipping ) ? $formatted_shipping : '–';
}
add_action( 'woocommerce_my_account_my_orders_column_order-ship-to', 'sv_wc_my_orders_ship_to_column' );

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

עמוד ההזמנות של ווקומרס עם עמודת משלוח

עמוד ההזמנות של ווקומרס עם עמודת משלוח

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

שאלות נפוצות

שאלות נפוצות בנוגע להוספת עמודות לטבלת ההזמנות של ווקומרס:

איזה פילטר משמש להוספת עמודות לטבלת ההזמנות בעמוד החשבון שלי?
הפילטר woocommerce_account_orders_columns מאפשר להוסיף, להסיר או לשנות סדר של עמודות בטבלת ההזמנות בעמוד My Account.
כיצד מאכלסים תוכן בעמודה החדשה?
משתמשים בפעולה (action) בשם woocommerce_my_account_my_orders_column_{$column_id}, כאשר $column_id הוא מפתח המערך שהגדרתם בפילטר. הפעולה מקבלת את אובייקט ההזמנה (WC_Order) ומאפשרת להדפיס כל מידע שרלוונטי.
האם ההוקים האלה עובדים עם HPOS?
כן. ההוקים woocommerce_account_orders_columns ו-woocommerce_my_account_my_orders_column_{$column_id} שייכים לתבנית הצד הלקוח (frontend) ועובדים ללא שינוי גם כש-HPOS מופעל. ההוקים של צד הניהול (Admin) הם שונים לחלוטין.
איך שולטים במיקום העמודה החדשה בטבלה?
בפילטר woocommerce_account_orders_columns, עוברים בלולאה על מערך העמודות הקיימות ומרכיבים מערך חדש. מוסיפים את העמודה החדשה בנקודה הרצויה תוך כדי הלולאה - לדוגמה, מיד אחרי העמודה order-status.
מה קורה כשאין כתובת משלוח בהזמנה?
המתודה get_formatted_shipping_address() תחזיר מחרוזת ריקה כשאין כתובת משלוח, למשל בהזמנות של מוצרים וירטואלים. בקוד לדוגמה בפוסט, במקרה כזה מוצג קו מפריד במקום הכתובת.

לסיכום

בזאת סיימנו. אם אתם מעוניינים לדעת כיצד לבצע שינויים נוספים לעמוד החשבון שלי (My Account), תנו מבט בפוסט הבא.

דיון ותגובות
2 תגובות  ]
  • שרה 19 מרץ 2023, 13:37

    איך מוסיפים טלפון מקבל המשלוח?

  • מרים 27 יוני 2023, 22:34

    איך מוסיפים עמודה שרואים בה את המוצרים המוזמנים?
    תודה!

השאירו תגובה

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

Savvy WordPress Development official logo