מכירת כרטיסים לאירועים עם Woocommerce

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

שיתוף ב facebook
שיתוף ב linkedin
שיתוף ב whatsapp
שיתוף ב email

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

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

את קוד ה-PHP במאמר זה ניתן להדביק בקובץ functions.php בתבנית הבת הפעילה באתר, או לארוז אותו כתוסף. יתכן שתזדקקו לעריכות קלות על מנת להתאים את הקוד לצרכים שלכם, כך שהמאמר מתאים לבעלי ידע (ולו בסיסי) בקוד. לקראת סוף המאמר אסקור בקצרה מספר חלופות לשיטה שהצעתי – שלושה תוספי כרטיסים לווקומרס ושירות אחד בקוד סגור.

להפוך את חנות הווקומרס שלנו למערכת למכירת כרטיסים

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

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

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

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

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

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

יוצרים קטגוריה ומוצרים

  1. לוח הבקרה ← מוצרים ← קטגוריות. צרו קטגוריה חדשה עבור האירועים. בהתאם לצורך ולאופי האתר ניתן לקרוא לה אירועים / מופעים / סדנאות / סמינרים וכו'.
  2. צרו מוצר שיהיה האירוע הראשון – לוח הבקרה ← מוצרים ← הוסף חדש.
    בחרו עבור האירוע שם, תארו אותו (תאריך, שעה, מיקום, תכנית וכו')
  3. הגדירו את המוצר כמוצר וירטואלי. כך המשתמש לא יצטרך לבחור שיטת משלוח.
  4. הגדירו למוצר מחיר, מחיר מבצע (אם יש צורך), תמונת מוצר, גלריית מוצרים (אם יש צורך)
  5. האם יש כמות מקומות מוגבלת? חשוב להגביל את כמות המוצרים במלאי (במקרה שלנו – כמות ה"כיסאות" או המקומות הפנויים)
  6. שייכו את המוצר לקטגוריית המוצרים אותה יצרתם בשלב 1 (אירועים, מופעים, כנסים…)
  7. לחצו על כפתור "פרסום" על מנת שהמוצר יתווסף לאתר (אם החנות פעילה, ובהנחה שהמוצר שהזנתם הוא רק לדוגמה, מומלץ לשמור כ"פרטי").

מגדירים בקוד את כל מה שייחודי למכירת כרטיסים

ריקון העגלה במקרה שהמשתמש קונה כרטיסים

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


/* Remove items from cart before add product from shows category */ 
 add_filter( 'woocommerce_add_to_cart_validation', 'remove_cart_item_before_add_to_cart', 20, 3 );
 function remove_cart_item_before_add_to_cart( $passed, $product_id, $quantity ) {
	if ( has_term( 'מופעים', 'product_cat', $product_id ) )
	 if( ! WC()->cart->is_empty() )
		 WC()->cart->empty_cart();
	 return $passed;
 }

שימו לב: יש לשנות את "מופעים" לשם שבחרתם עבור הקטגוריה.

נפנה את המשתמש לרכישה מהירה

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


/**
 * Redirect users after add to cart - shows category.
 */
 add_filter( 'woocommerce_add_to_cart_redirect', 'rv_redirect_on_add_to_cart' );
 function rv_redirect_on_add_to_cart() {
		 //Get product ID
	 if ( isset( $_POST['add-to-cart'] ) ) {
	 
		 $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_POST['add-to-cart'] );
	 
		 //Check if product ID is in the proper taxonomy and return the URL to the redirect product
		 if ( has_term( 'מופעים', 'product_cat', $product_id ) )
			 return get_permalink( get_option( 'woocommerce_checkout_page_id' ) ); 
		 }
 }

שימו לב: יש לשנות את "מופעים" לשם שבחרתם עבור הקטגוריה.

שינוי הכיתוב על הכפתור בדף מוצר

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


/* Change Add to cart button text - shows category*/
	add_filter('woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text');
 
	function woo_custom_cart_button_text() {
		if ( is_product() && has_term( 'מופעים', 'product_cat' ) ) {
			return __('להמשך רכישה >>>', 'woocommerce');
		} else {
			return __('הוספה לסל', 'woocommerce');
		}
	}

שימו לב: יש לשנות את "מופעים" לשם שבחרתם עבור הקטגוריה.

התאמת הטקסט במקרה שהמוצר כבר לא במלאי

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


/* Replace default text of out-of-stock in shows category */
 add_filter('woocommerce_get_availability', 'availability_filter_func');
 function availability_filter_func($availability) {
	if ( has_term( 'מופעים', 'product_cat', $product_id ) )
		$availability['availability'] = str_ireplace('המלאי אזל', 'כל הכרטיסים נמכרו. עמכם הסליחה. אנו נעדכן אתכם כאשר ייפתחו מופעים נוספים.', $availability['availability']);
		return $availability;
 }

שימו לב: יש לשנות את "מופעים" לשם שבחרתם עבור הקטגוריה.

ניקוי עמוד Checkout משדות כתובת

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


//Remove the billing address fields for free virtual orders in WooCommerce
function patricks_billing_fields( $fields ) {
global $woocommerce;

// return the regular billing fields if we need shipping fields
if ( $woocommerce->cart->needs_shipping() ) {
return $fields;
}
// we don't need the billing fields so empty all of them except the email
unset( $fields['billing_address_1'] );
unset($fields['billing']['billing_address_2']);
unset( $fields['billing_city'] );
unset( $fields['billing_state'] );
unset( $fields['billing_postcode'] );

return $fields;
}
add_filter( 'woocommerce_billing_fields', 'patricks_billing_fields', 20 );

הגדרה אוטומטית של סטטוס המכירה כ"הושלם"

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


// Set WooCommerce Virtual Order Status to Complete After Payment
add_filter( 'woocommerce_payment_complete_order_status', 'virtual_order_payment_complete_order_status', 10, 2 );
function virtual_order_payment_complete_order_status( $order_status, $order_id ) {
  $order = new WC_Order( $order_id );
  if ( 'processing' == $order_status &&
       ( 'on-hold' == $order->status || 'pending' == $order->status || 'failed' == $order->status ) ) {
    $virtual_order = null;
    if ( count( $order->get_items() ) > 0 ) {
      foreach( $order->get_items() as $item ) {
        if ( 'line_item' == $item['type'] ) {
          $_product = $order->get_product_from_item( $item );
          if ( ! $_product->is_virtual() ) {
            // once we've found one non-virtual product we know we're done, break out of the loop
            $virtual_order = false;
            break;
          } else {
            $virtual_order = true;
          }
        }
      }
    }
    // virtual order, mark as completed
    if ( $virtual_order ) {
      return 'completed';
    }
  }
  // non-virtual order, return original status
  return $order_status;
}

הודעה בדף תודה

יתכן שנרצה להוסיף בדף התודה של ווקומרס (שאליו מועבר המשתמש לאחר רכישה מוצלחת) התייחסות יחודית לרכישה של כרטיסים:


//woocommerce -  order received - Add instructions.
add_action( 'woocommerce_thankyou', 'custom_thankyou_text', 1, 1);
function custom_thankyou_text( $order_id ){

    // HERE Define Your product category (ID, slug or name)
    $category = array('מופעים');

    // Get the WC_Order object (an instance)
    $order = wc_get_order( $order_id );
    $has_category = false;

    // Loop through the order items
    foreach( $order->get_items() as $item ){
        // PRODUCT CATEGORY
        if( has_term( $category, 'product_cat', $item->get_product_id() ) )
            $has_category = true;
    }
    // For product category 
    if( $has_category ){
 echo '<p class="thankyou-custom-text">תודה לך על הזמנת כרטיסים למופע. אישור הזמנת כרטיסים נשלח אליך למייל. הצגת המייל תשמש אותך לצורך כניסה למופע.</p>';
     } 
}

שימו לב: יש לשנות את "מופעים" לשם שבחרתם עבור הקטגוריה.

מחשבות נוספות

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

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

במדריך זה ניסיתי לפשט את הרעיון ולהגיש קוד "רזה" ותכליתי. פיתרון מקיף יותר יכול לכלול את "מופעים" לא כקטגוריה אלא כסוג מוצר (product type) חדש, עם שדות מטא מותאמים וכו'.

איך לקבל רשימה של כל מי שרכש כרטיסים לאירוע?

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

על מנת ליצא את שמות הנרשמים לקובץ CSV ניתן להעזר בתוסף מתאים. אני משתמש ב Advanced Order Export For WooCommerce.

עיצוב עמוד האירוע

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

שימוש בתוסף לצורך מכירת כרטיסים

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

שווה לשקול להשתמש בהם אם אתם צריכים, למשל, תצוגת לוח שנה של אירועים, יצוא נוח יותר של רכישות, עיצובים מוכנים מראש של עמודי אירוע, "צ'ק אין" באמצעות QR Code, שליחת כרטיס כקובץ PDF או קופונים מתקדמים. בשונה מאופן העבודה של הקוד שלי, כל התוספים כאן לא משתמשים במערכת המוצרים של ווקומרס, אלא יוצרים CPT משלהם דרכו מתנהלת כל העבודה. יותר נוח או פחות? עניין של טעם, אני מניח.

 


Event Tickets Plus
– תוסף מבית היוצר של The Events Calendar (והוא כמובן מתממשק איתו). הגרסה בתשלום כוללת התממשקות מאלה עם ווקומרס, ולא מעט פיצ'רים נהדרים.


YITH EVENT TICKETS FOR WOOCOMMERCE
– כלים מתקדמים מאוד לניהול אירועים, כמו מחיר שמתעדכן ככל שמועד האירוע קרב, אפשרות לרכישת מוצרים נוספים בתוך מכירת הכרטיס (מזון, שדרוגים וכו') ועוד.


WooCommerce Event Manager
– למרות שהוא חינמי, הוא מאפשר לא מעט אפשרויות מתקדמות – הוספה של מוצרים שיהיו כלולים בתוך הכרטיס הנרכש ופרטי אירוע עשירים. ניתן לרכוש עבורו Add-ons אפשר מאפשרים יצוא מהיר של רכישות לאירוע ושליחה של PDF עם פרטי האירוע לרוכשים.

foo events
FooEvents
– משפחת תוספים עם אפשרויות מתקדמות מאוד. כולל מגוון טמפלטים, כרטיס כ PDF, הזמנת מקומות ישיבה מסומנים ותיקוף כרטיסים עם אפליקציה יעודית בקופת האירוע.

 

שימוש בשירות צד ג' לצורך מכירת כרטיסים

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

סיכום

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

האם המדריך דורש עדכון?

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

שיתוף

שיתוף ב facebook
שיתוף ב whatsapp
שיתוף ב linkedin
שיתוף ב email

לקריאה נוספת

איך לאפשר למשתמשים שלנו להתחבר לאתר באמצעות חשבונות גוגל ופייסבוק?

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

נשמח לספק לחברה שלך פתרונות מקצועיים בהתאמה אישית.

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

אתר זה עושה שימוש בעוגיות