כחלק מהעבודה השוטפת שלי מול חברות דיגיטל, הרבה פעמים עולה הדרישה להטמיע את סיפרייה eCommerce של Google Analytics על מנת לעקוב אחרי הכנסות האתר ממכירות ישירות ב-Google Analytics.

Google Analytics נותנת לנו כוח ע״י זיהוי אירועי משתמש וכעת גם ע״י מעקב אחרי ביצועי החנות האינטרנטית שלנו.

מה זה eCommerce Analytics?

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

מעקב אחרי מכירות ב-Google Analytics בשילוב עם כלים נוספים של גוגל, מאפשרים לחברות הדיגיטל להסיק מסקנות רבות אודות איכות החנות ונפח התעבורה שהאתר מקבל ביחס לכמות ההכנסות של האתר.

הפעלת סיפריית eCommerce Analytics

הצעד הראשון שעלינו לעשות הוא להפעיל את האפשרות למעקב אחר eCommerce, נעשה זאת ע״י התחברות לחשבון שלנו ב-Google Analytics, ננווט ל-Admin ומשם לנכס הרלוונטי ולבסוף נלחץ על Ecommerce Tracking.

צילום מסך של פאנל הניהול של גוגל אנליטיקס

בחלונית שנפתחה לנו נפעיל את Enable Ecommerce ולבסוף נלחץ על Save.

טעינת סיפריית eCommerce Analytics

כעת לאחר שהפעלנו את הסיפרייה נצטרך לטעון אותה בקוד שלנו על מנת שהקוד של Google Analytics יטען את הקוד האחראי על שליחת הנתונים ל-Google Analytics.

במידה והטמעתם את קוד המעקב של Google Analytics ע״י הטמעה ישירה שלו בתבנית או ע״י תוסף הזרקה של קוד כמו Insert Headers and Footers, כל שעליכם לעשות הוא להוסיף את שורת הקוד הבאה לפני תגית </script>:

ga('require', 'ecommerce');

חיבור ל-WooCommerce

השלב הבא הוא להוסיף את הקוד שאחראי על שליחת נתוני ה-eCommerce ל-Google Analytics, נעשה זאת ע״י פתיחת קובץ functions.php של התבנית שלנו, ונדביק את הקוד הבא בסופו:

/**
 * Google eCommerce Analytics integration for WooCommerce.
 *
 * @param int $order_id current order id.
 *
 * @return bool
 */
function dorzki_google_analytics_ecommerce( $order_id ) {

	// Exit if already submitted the data to google.
	if ( get_post_meta( $order_id, '_ga_ec_tracked', true ) ) {
		return false;
	}

	// Get current order by id.
	$order = wc_get_order( $order_id );

	// If order has failed for some reason, don't send the data.
	if ( $order->has_status( 'failed' ) ) {
		return false;
	}

	// Build transaction object.
	$ga_code = "<script>" . PHP_EOL;

	$ga_code .= " ga( 'ecommerce:addTransaction', {
    'id': '{$order_id}',
    'affiliation': '" . esc_js( get_bloginfo( 'name' ) ) . "',
    'revenue': '" . esc_js( $order->get_total() ) . "',
    'shipping': '" . esc_js( $order->get_shipping_total() ) . "',
    'tax': '" . esc_js( $order->get_total_tax() ) . "',
    'currency': '" . esc_js( $order->get_currency() ) . "'
  } );" . PHP_EOL . PHP_EOL;

	// Build items object.
	foreach ( $order->get_items() as $item ) {

		$_product    = $item->get_product();
		$product_cat = '';

		// Get product category.
		$variation_data = $_product->is_type( 'variation' ) ? wc_get_product_variation_attributes( $_product->get_id() ) : '';
		$categories     = get_the_terms( $_product->get_id(), 'product_cat' );

		// If the current product is a variation, retrieve the parent product.
		if ( is_array( $variation_data ) && ! empty( $variation_data ) ) {

            $product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $_product->parent->id : $_product->get_parent_id();

			$parent_product = wc_get_product( $product_id );

			$categories = get_the_terms( $parent_product->get_id(), 'product_cat' );

		}

		if ( ! empty( $categories ) ) {

			$product_cat = $categories[0]->name;

		}

		$ga_code .= " ga( 'ecommerce:addItem', {
	      'id': '{$order_id}',
	      'name': '" . esc_js( $item['name'] ) . "',
	      'sku': '" . esc_js( $_product->get_sku() ? $_product->get_sku() : $_product->get_id() ) . "',
	      'category': '" . esc_js( $product_cat ) . "',
	      'price': '" . esc_js( $order->get_item_total( $item ) ) . "',
	      'quantity': '" . esc_js( $item['qty'] ) . "'
	    } );" . PHP_EOL . PHP_EOL;

	}

	$ga_code .= " ga( 'ecommerce:send' );" . PHP_EOL;
	$ga_code .= "</script>";

	// Mark that the data was sent.
	update_post_meta( $order_id, '_ga_ec_tracked', true );

	echo $ga_code;

}

add_action( 'woocommerce_thankyou', 'dorzki_google_analytics_ecommerce' );

שלב ראשון – אחזור ובדיקת הזמנה

בתחילת הקוד (שורות 11-21), אנחנו בודקים קודם כל האם כבר שלחנו את המידע הזה, על מנת למנוע מצב שהמידע נשלח יותר מפעם אחת ומדווח על אותה ההזמנה פעמיים אנחנו בודקים האם הקוד כבר נשלח. לאחר מכן אנו מבקשים לקבל את ההזמנה ע״ כך שאנחנו מעבירים את מזהה ההזמנה לפונקציה wc_get_order אשר אחראית על אחזור אובייקט ההזמנה.

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

שלב שני – יצירת טרנזקציה

כעת לאחר שבדקנו שהכל בסדר עם ההזמנה, עלינו ליצור טרנזקציה חדשה (שורות 26-33), הטרנזקציה היא בעצם הדרך של Google Analytics לזהות הזמנה במערכת.

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

שדההסבר
idמספר ההזמנה או מזהה ההזמנה
affiliationשם החנות
revenueסכום המכירה הכולל
shippingעלות המשלוח
taxמיסים
currencyמטבע תשלום

שלב שלישי – שליחת נתוני המוצרים

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

נתחיל בלרוץ על כל המוצרים שיש בהזמנה (שורה 36) ועבור כל אחד מהם נאחזר את האובייקט של המוצר (שורה 38) על מנת לקבל את נתונים המוצר.
לאחר מכן אנו נבדוק האם המוצר הנוכחי הוא מוצר מסוג וריאציה (שורה 42), במידה וכן נבקש לקבל את מוצר האב (שורות 42-54) בשביל שנוכל לקבל את הקטגוריות של המוצר.

לבסוף נשלח את הנתונים של המוצר (שורות 62-69) ע״י שימוש בפונקציה ga בשנית כאשר הפרמטר הראשון הוא הוספת מוצר addItem והפרמטר השני יכיל את נתונים המוצר:

שדההסבר
idמספר ההזמנה או מזהה ההזמנה
nameשם המוצר
skuמק״ט המוצר או מזהה המוצר
categoryקטגוריית המוצר הראשית
priceעלות המוצר
quantityכמות שנרכשה

שלב רביעי – שיגור המידע ל-Google Analytics

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

סיכום

Google Analytics הינו כלי חזק בדיוק אשר מאפשר לנו לקבל המון נתונים אודות הגולשים ופעילות האתר שלנו וע״י הטמעת הקוד הנ״ל נוכל לקבל נתונים נוספים וסטטיסטיקות מורכבות יותר אודות החנות שלנו.

דור צוברי

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

דור צוברי

תגובות לפוסט

כתיבת תגובה

תגובה אחת

  1. עידן

    מעולה.
    שאלה, האנליטיקס עובד דרך התג מנג'ר, במידה ואני אטמיע את הקוד ב- functions.php האם זה יסתנכרן כשורה?

    1. מחבר
      דור צוברי

      היי עידן,
      אם הגדרת את הקוד דרך Google Tag Manager זה אמור לעבוד לך.

      אשמח אם תוכל לבדוק ולעדכן אותי אם עבד לך או לא 🙂

  2. מתן

    מאמר מעולה, תודה רבה! ?

    1. מחבר
      דור צוברי

      היי מתן,
      שמח לשמוע! מזמין אותך להירשם לעדכונים במייל או בטלגרם 🙂