זיהוי מיקום גולש (Geolocation) הינו פיצ׳ר אשר משתמשים בו המון אתרי מכר (איקומרס) ברחבי העולם.
אתרים כמו Hotels, Bookings וכד׳ משתמשים לרוב במיקום שלכם על מנת להציע לכם מלונות באיזור שלכם במחירים ״אטרקטיביים״.

מה זה Geolocation?

Geolocation הינה האפשרות לזהות את מיקומו הפיזי של הגולש לפי כתובת ה-IP שלו.
כתובת ה-IP של הגולש לא יכולה לתת את מיקומו המדוייק של הגולש (מטעמי אבטחה כמובן), אך היא יכולה להצביע על העיר או האיזור בו הגולש נמצא.

לוגו של טלגרם הצטרפו לערוץ הטלגרם וקבלו עדכון כאשר מאמר חדש מתפרסם!

איך עובד Geolocation?

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

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

דוגמא נוספת לאי-דיוק ה-Geolocation היא שניתן להשתמש ב-VPN על מנת לזייף את המיקום שלכם.

Geolocation בווקומרס

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

הפעלת Geolocation

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

דרך 1 – מסך הגדרות ווקומרס

הדרך הראשונה והקלה ביותר, היא הפעלת האפשרות דרך מסך ההגדרות של ווקומרס.
נתחבר לפאנל הניהול של וורדפרס ותחת ״ווקומרס״ נבחר ב-״הגדרות״.

במסך שיתחבר תחת האפשרות ״מיקום ברירת מחדל של הלקוח״ נבחר באופציה ״אתר גאוגרפית״.
שימו לב, אם באתר שלכם מותקן תוסף Caching כמו WP-Rocket יש לבחור ב-״אתר גאוגרפית (עם תמיכה באחסון עמודים במטמון)״.

דרך 2 – הפעלה בקוד

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

add_filter( 'woocommerce_geolocation_update_database_periodically', '__return_true' );

זיהוי מיקום גולש עם ווקומרס

על מנת לזהות את מיקום הגולש עם סיפריית MaxMind וווקומרס עלינו להשתמש במחלקת WC_Geolocation של ווקומרס.

/**
 * Use Woocommerce Geolocation with MaxMind.
 *
 * @return void
 */
function dorzki_woocommerce_geolocate_user() {

	if( ! class_exists( 'WC_Geolocation' ) ) {
		return;
	}

	$geoip = WC_Geolocation::geolocate_ip();

	if( empty( $geoip['country'] ) ) {
		return;
	}

	if( 'IL' === $geoip['country'] ) {

		echo "Shalom!";
		
	}

}

בקוד הנ״ל אנו מבקשים לקבל נתונים אודות מיקומו הפיזי של הגולש ע״י שימוש בפונקציית geolocate_ip() תחת מחלקת WC_Geolocation.
הפונקציה תחזיר תמיד מערך עם שתי ערכים – ״מדינה (Country)״ ו-״מחוז/עיר (State)״.

המדינה אשר מוחזרת תהיה תמיד מדינה בקוד ISO, כלומר קוד מדינה המורכב משתי אותיות (לדוגמא: IL עבור ישראל).
משום מה ״מחוז/עיר״ יוחזר תמיד ריק, בעוד שהמדינה תוחזר כמעט תמיד.

דוגמאות לשימוש ב-Geolocation

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

דוגמא א׳ – העלאת מחיר למדינה מסויימת

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

/**
 * Use Woocommerce Geolocation with MaxMind.
 *
 * @param string $price product price.
 *
 * @return float
 */
function dorzki_woocommerce_geolocate_change_price( $price ) {

	if( ! class_exists( 'WC_Geolocation' ) ) {
		return $price;
	}

	$geoip = WC_Geolocation::geolocate_ip();

	if( ! empty( $geoip['country'] ) && 'UK' === $geoip['country'] ) {
		return $price * 1.2;
	}

	return $price;

}

add_filter( 'woocommerce_product_get_price', 'dorzki_woocommerce_geolocate_change_price' );
add_filter( 'woocommerce_product_get_regular_price', 'dorzki_woocommerce_geolocate_change_price' );

בדוגמא זו, אנו בודקים את מדינת הגולש, במידה והיא אנגליה, אנו מעלים את מחירי המוצר ב-20%.

דוגמא ב׳ – הגבלת רכישת מוצר ווקומרס

במידה ולא נרצה לאפשר רכישה של מוצר מסויים למדינה מסויימת, נוכל להגביל את הרכישה באופן הבא:

/**
 * Use Woocommerce Geolocation with MaxMind.
 *
 * @return void
 */
function dorzki_woocommerce_geolocate_disable_purchase() {

	global $product;

	if( 10 !== $product->get_id() ) {
		return;
	}

	if( ! class_exists( 'WC_Geolocation' ) ) {
		return;
	}

	$geoip = WC_Geolocation::geolocate_ip();

	if( ! empty( $geoip['country'] ) && 'IL' === $geoip['country'] ) {

		remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );

		wc_add_notice( __( 'Sorry, this product is unavailable to your country.', 'dorzki' ), 'error' );

	}

}

add_action( 'woocommerce_before_single_product', 'dorzki_woocommerce_geolocate_disable_purchase', 5 );

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

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

דוגמא ג׳ – הסתרת אמצעי תשלום למדינות מסויימות

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

בדוגמא הבאה נלמד כיצד להסתיר את אמצעי התשלום הלא רלוונטיים למדינת הגולש עם Geolocation.

/**
 * Use Woocommerce Geolocation with MaxMind.
 *
 * @param array $payment_methods list of available payment methods.
 *
 * @return array
 */
function dorzki_woocommerce_geolocate_hide_payment_methods( $payment_methods ) {

	if( ! class_exists( 'WC_Geolocation' ) ) {
		return $payment_methods;
	}

	$geoip = WC_Geolocation::geolocate_ip();

	if( ! empty( $geoip['country'] ) && 'IL' !== $geoip['country'] ) {

		return [ 'paypal' => $payment_methods['paypal'] ];

	}

	return $payment_methods;

}

add_filter( 'woocommerce_available_payment_gateways', 'dorzki_woocommerce_geolocate_hide_payment_methods' );

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

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

מזההאמצעי תשלום
paypalפייפאל
bacsהעברה בנקאית ישירה
chequeתשלום בהמחאה
codמזומן במסירה

הרשימה הנ״ל מייצגת את אמצעי התשלום שמגיעים בברירת המחדל עם ווקומרס, במידה והתקנתם תוסף אמצעי תשלום, יש לברר מה המזהה של אמצעי התשלום ע״י הסתכלות בקוד של עמוד התשלום דרך Chrome Developer Tools.

דוגמא ד׳ – הפניית גולש לאתר אחר

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

/**
 * Use Woocommerce Geolocation with MaxMind.
 *
 * @return void
 */
function dorzki_woocommerce_geolocate_redirect() {

	if( ! class_exists( 'WC_Geolocation' ) ) {
		return;
	}

	$geoip = WC_Geolocation::geolocate_ip();

	if( ! empty( $geoip['country'] ) && 'IL' !== $geoip['country'] ) {

		wp_redirect( 'https://www.example.com' );
		exit;

	}

}

add_action( 'template_redirect', 'dorzki_woocommerce_geolocate_redirect' );

בדוגמא הנ״ל במידה והגולש הוא לא מישראל, נפנה אותו לקישור אחר, לדוגמא לאתר הבינלאומי של העסק שלנו.

סיכום

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

דור צוברי

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

דור צוברי

תגובות לפוסט

כתיבת תגובה

תגובה אחת

  1. זאב

    יש אפשרות שניתן לעשות הפניות לערים בארץ?
    אם מישהו מבאר שבע יופנה ל-X כתובת ואם הוא מתל אביב לכתובת אחרת?

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

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

  2. ניסים

    מעניין

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

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

  3. אלדד

    כתבה מושלמת !

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

      תודה רבה אלדד!
      שמח לשמוע 🙂