Categories
וורדפרס

ווקומרס

ובחזרה לעתיד.

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

ליצירת תבנית בת ל-Storefront, צרו את הנתיב wp-content/themes/storefront-chlid, ובו את הקבצים style.css ו-style-rtl.css עם התוכן:

/*
Theme Name: Storefront Child
Template: storefront
*/

והקובץ functions.php עם התוכן:

<?php
add_action( 'wp_enqueue_scripts', 'condless_theme_enqueue_styles', 9999 );
function condless_theme_enqueue_styles() {
	if ( is_rtl() ) {
        	wp_dequeue_style( 'storefront-child-style' );
		wp_enqueue_style( 'child-style-rtl', get_stylesheet_directory_uri() . '/style-rtl.css', 'storefront-style' );
	}
}

לעריכת הכיתוב של לחצן התפריט במובייל בתבנית Storefront:

add_filter( 'storefront_menu_toggle_text', 'condless_storefront_menu_toggle_text' );
function condless_storefront_menu_toggle_text( $text ) {
	$text = __( 'תפריט' );
	return $text;
}

לעריכת הכיתוב של הלחצן "עדכן עגלת קניות" במובייל:

add_filter( 'gettext', 'condless_change_update_cart_text', 20, 3 );
function condless_change_update_cart_text( $translated, $text, $domain ) {
	if ( wp_is_mobile() && is_cart() && $translated == 'עדכן עגלת קניות' ) {
		$translated = 'הכיתוב למובייל';
	}
	return $translated;
}

לעריכת קובץ הייצוא CSV של המוצרים עם אותיות שלא בשפה האנגלית יש לקודד אותו ל-UTF-8 (ניתן בפנקס רשימות / גוגל שיטס).

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

add_action( 'woocommerce_thankyou', 'condless_woocommerce_auto_processing_orders' );
function condless_woocommerce_auto_processing_orders( $order_id ) {
	if ( ! $order_id ) {
		return;
	}
	$order = wc_get_order( $order_id );
	if( $order->has_status( 'on-hold' ) ) {
        	$order->update_status( 'processing' );
	}
}

שינוי סדר הופעת התיבות בדף התשלום:

add_filter( 'woocommerce_checkout_fields', 'condless_reordering_checkout_fields' );
function condless_reordering_checkout_fields( $fields ) {
    $billing_order = array(
        'billing_first_name',
        'billing_last_name',
        'billing_email',
        'billing_phone',
        'billing_company',
        'billing_address_1',
        'billing_address_2',
        'billing_postcode',
        'billing_city',
        'billing_state',
        'billing_country'
    );
    $count = 0;
    $priority = 10;
    foreach($billing_order as $field_name){
        $count++;
        $fields['billing'][$field_name]['priority'] = $count * $priority;
    }
    $fields['billing']['billing_email']['class'] = array('form-row-first');
    $fields['billing']['billing_phone']['class'] = array('form-row-last');
    $fields['billing']['billing_postcode']['class'] = array('form-row-first');
    $fields['billing']['billing_city']['class'] = array('form-row-last');
    return $fields;
}

הסתרה של וריאציות מסוימות במוצר:

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'condless_hide_dropdown_variation_args' );
function condless_hide_dropdown_variation_args( $args ) {
    $args['show_option_none'] = false;
    foreach( $args['options'] as $key => $option ){
        if( $option === "2,5 kg" ) {
            unset($args['options'][$key]);
        }
    }
    return $args;
}

הוספת ולדיציה לשדות בדף התשלום. לדוגמא, כדי לאפשר אותיות בעברית ותווי ASCII בלבד (אשר כוללים אותיות באנגלית):

add_action( 'woocommerce_after_checkout_validation', 'condless_ascii_validate_checkout', 10, 2 );
function condless_ascii_validate_checkout( $fields, $errors ) {
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_first_name' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם פרטי</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_last_name' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם משפחה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_company' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם החברה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_address_1' ] ) )
                $errors->add( 'validation', '<strong>חיוב כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_address_2' ] ) )
                $errors->add( 'validation', '<strong>חיוב פרטי כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_city' ] ) )
                $errors->add( 'validation', '<strong>חיוב עיר</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_first_name' ] ) )
                $errors->add( 'validation', '<strong>משלוח שם פרטי</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_last_name' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם משפחה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_company' ] ) )
                $errors->add( 'validation', '<strong>משלוח שם החברה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_address_1' ] ) )
                $errors->add( 'validation', '<strong>משלוח כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_address_2' ] ) )
                $errors->add( 'validation', '<strong>משלוח פרטי כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_city' ] ) )
                $errors->add( 'validation', '<strong>משלוח עיר</strong> מכיל אותיות שלא באנגלית או בעברית.' );
}

ביצוע מניפולציות בתצוגה של מחיר המוצר, למשל כדי להציג את ההנחה במוצר שבמבצע:

add_filter( 'woocommerce_get_price_html', 'condless_simple_product_price_format', 10, 2 );
function condless_simple_product_price_format( $price, $product ) {
   if ( $product->is_on_sale() && $product->is_type('simple') ) {
      $price = sprintf( __( '<div class="was-now-save"><div class="was">היה %1$s</div><div class="now">עכשיו %2$s</div><div class="save">חסוך %3$s</div></div>', 'woocommerce' ), wc_price ( $product->get_regular_price() ), wc_price( $product->get_sale_price() ), wc_price( $product->get_regular_price() - $product->get_sale_price() )  );      
   }
   return $price;
}

הצגת מחיר המוצר לפני ואחרי מע"מ ואת סכומו:

add_filter( 'woocommerce_get_price_suffix', 'condless_price_vat_suffix', 10, 4 );
function condless_price_vat_suffix( $html, $instance, $price, $qty ) {
if ( is_product() ) {
        $html .=  ' + ' . wc_price(wc_get_price_including_tax($instance) - wc_get_price_excluding_tax($instance)) . ' מע"מ =  ' . wc_price(wc_get_price_including_tax($instance)); }
        return $html;
}

הצגת סכום המע"מ בשורה נפרדת בעגלת הקניות ובעמוד התשלום (רלוונטי כשמוגדרת הצגת מחירים כולל מיסים):

add_action( 'woocommerce_cart_totals_before_order_total', 'condless_wc_display_vat' );
add_action( 'woocommerce_review_order_before_order_total', 'condless_wc_display_vat' );
function  condless_wc_display_vat() {
        foreach( WC()->cart->get_taxes() as $tax ) $all_tax += $tax;
        echo '<tr class="cart-discount">
        <th>'. __( esc_attr( WC()->countries->tax_or_vat() ), 'woocommerce' ) .'</th>
        <td data-title=" '. __( esc_attr( WC()->countries->tax_or_vat() ), 'woocommerce' ) .' ">' . wc_price ( $all_tax ) .'</td>
        </tr>';
}

add_filter( 'woocommerce_cart_totals_order_total_html', 'condless_cart_totals_order_total_html', 20, 1 );
function condless_cart_totals_order_total_html( $value ){
        return '<strong>' . WC()->cart->get_total() . '</strong> ';
}

הסרת ההודעות על מוצר שנוסף/הוסר:

add_filter( 'wc_add_to_cart_message_html', '__return_null' );
add_filter( 'woocommerce_cart_item_removed_notice_type', '__return_null' );

הצגת מוצרים בלבד בתוצאות פונקציית החיפוש המובנית:

add_filter('pre_get_posts','condless_search_wc');
function condless_search_wc( $query ) {
	if( ! is_admin() && is_search() ) {
		$query->set( 'post_type', 'product' );
	}
	return $query;
}

הסתרה מתוצאות החיפוש מוצרים שהוגדרו כך:

add_action( 'pre_get_posts', 'condless_search_query_fix' );
function condless_search_query_fix( $query = false ) {
	if( ! is_admin() && is_search() ) {
		$query->set( 'tax_query', array( array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'exclude-from-search', 'operator' => 'NOT IN' ) ) );
	}
}

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

add_filter( 'woocommerce_is_sold_individually', 'condless_wc_remove_quantity_fields', 10, 2 );
function condless_wc_remove_quantity_fields( $return, $product ) {
	if ( $product->get_stock_quantity() <= $product->get_low_stock_amount() )
  		return true;
}

להגדרת תשלום מינימלי לרכישה עם משלוח, הזינו בשדה ה"עלות" (החליפו את min_order$ עם הערך הרצוי):

$min_order - [fee percent="100" max_fee="$min_order"]

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

add_filter( 'pum_get_conditions', 'condless_pum_cart_product_quantity_conditions' );
function condless_pum_cart_product_quantity_conditions( $conditions ) {
        return array_merge( $conditions, array(
                'password_page_unlocked' => array(
                        'group'    => __( 'מוצרים' ),
                        'name'     => __( 'מוצרים: כמות בעגלה' ),
                        'callback' => 'cart_product_quantity',
                ),
        ) );
}
function cart_product_quantity() {
        foreach ( WC()->cart->get_cart() as $cart_item ) {
                if ( $cart_item['product_id'] == 772 && $cart_item['quantity'] < 3 ) {
                                return true;
                }
        }
        return false;
}

אפשרויות משלוח מותנות.

פגישות והזמנות.

סיטונאות.

התאמה אישית של המוצרים.

שחזור תוכן של עגלות שננטשו.

יישום אוטומטי של קופון בעגלה.

מעקב משלוחים (כולל דואר ישראל).

הוספת שיטות תשלום לאפליקציות תשלום חסרות API (כמו ביט (Bit), פפר פיי (PepperPay) ופייבוקס (PayBox)).

עמלות והנחות לפי שיטת תשלום.

הנחות מורכבות.

שיטת תשלום פר מוצר.

בקשה להצעת מחיר כצורת תשלום.

איסוף כספים.

עריכה קבוצתית למוצרים עם וריאציות.

סינון מוצרים.

ריבוי ספקים.

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

add_action( 'admin_head', 'condless_admin_custom_css' );
function condless_admin_custom_css() {
	echo '<style>
	.chosen-container .chosen-drop { left: 9999px; } 
	</style>'; 
}

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