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

מה זה Geolocation?

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

איך עובד Geolocation?

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

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

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

Geolocation בווקומרס

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

הפעלת Geolocation

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

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

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

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

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

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

add_filter( 'woocommerce_geolocation_update_database_periodically', '__return_true' );

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

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

/**
 * Use WooCommerce Geolocate 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 עבור ישראל).
משום מה ״מחוז/עיר״ יוחזר תמיד ריק, בעוד שהמדינה תוחזר כמעט תמיד.

דוגמאות לשימוש

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

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

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

/**
 * Use WooCommerce Geolocate 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 Geolocate 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 Geolocate 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 Geolocate 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, דבר אשר יכול לשפר פלאות את זמני הטעינה של האתר.

    כתיבת תגובה

    1. אלדד

      כתבה מושלמת !

      הגב
      1. דור צוברי

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

    2. ניסים

      מעניין

      הגב
      1. דור צוברי

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

    3. זאב

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

      הגב
      1. דור צוברי

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

    4. ליאור תור

      מגניב לאללה!
      אני רוצה להפנות אנשים לא ישראלים לאתר באנגלית – example.co.il/en
      וישראלים לאתר בעברית – example.co.il

      אבל רק בפעם הראשונה שהמשתמש נכנס. אח"כ שהוא יוכל לעבור משפה לשפה לפי בחירתו ולפי הCOOKIE.
      איזה פונקציה צריך בשביל לבדוק האם זאת פעם ראשונה של המשתמש להכנס?

      הגב
      1. דור צוברי

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

        אם אתה משתיל עוגיה אתה יכול לשאול אם יש לו עוגיה, אם כן, זאת אומרת שהוא גולש חוזר, אם אין לו את העוגיה, זה גולש חדש 🙂

    5. רוב

      מאמר יפה.
      יש לך הסבר איך אפשר להציג שיטת משלוח אחת לכל הארץ ושיטה אחרת רק לתל אביב?

      הגב
      1. דור צוברי

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

        לא ממליץ להסתמך על זה.

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

    שתפו