Changeset 2346835
- Timestamp:
- 07/26/2020 07:40:51 PM (6 years ago)
- Location:
- oribi-analytics-for-woocommerce
- Files:
-
- 3 edited
-
assets/icon-128x128.gif (modified) (previous)
-
assets/icon-256x256.gif (modified) (previous)
-
trunk/oribi-analytics-ecommerce.php (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
oribi-analytics-for-woocommerce/trunk/oribi-analytics-ecommerce.php
r2339827 r2346835 6 6 * Author: Oribi 7 7 * Author URI: https://oribi.io 8 * Version: 1. 0.18 * Version: 1.1.0 9 9 * Text Domain: oribi 10 10 * WC requires at least: 2.2 … … 58 58 59 59 class Oribi_Event_Tracker { 60 public static $default_tracking_capabilities = array( 61 'email' => true 62 ); 63 60 64 public static function init() { 61 65 $tracking_capabilities = self::get_tracking_capabilities(); 62 66 63 add_ action( 'woocommerce_thankyou', array( self::class, 'oribi_track_woocommerce_purchase' ));64 67 add_filter('woocommerce_payment_successful_result', array( self::class, 'oribi_track_woocommerce_purchase' ), 1, 2 ); 68 add_action('wp_footer', array( self::class, 'trackIntegratePurchase' )); 65 69 66 70 if ( isset( $tracking_capabilities['email'] ) && (bool)$tracking_capabilities['email'] ) { 67 add_action( 'wp_ head', array( self::class, 'oribi_track_users_email' ));71 add_action( 'wp_footer', array( self::class, 'oribi_track_users_email' ), 999999999 ); 68 72 } 69 73 } … … 71 75 public static function get_tracking_capabilities() { 72 76 $tracking_capabilities = get_option( 'oribi_tracking_capabilities' ); 73 $tracking_capabilities = array_replace( 74 array( 75 'woocommerce' => true, 76 'email' => false 77 ), 78 (array)$tracking_capabilities 77 $default_unchecked = array( 78 'email' => false 79 79 ); 80 return $tracking_capabilities; 80 $tracking_capabilities = 81 is_array( $tracking_capabilities ) 82 ? array_replace( $default_unchecked, $tracking_capabilities ) 83 : $default_unchecked; 84 return array_replace( self::$default_tracking_capabilities, $tracking_capabilities ); 81 85 } 82 86 … … 84 88 $user_email = null; 85 89 if ( is_user_logged_in() ) { 86 $user_email = wp_get_current_user()->user_email; 90 $current_user = wp_get_current_user(); 91 $user_email = $current_user->user_email; 87 92 } 88 93 if ( isset( $user_email ) ) { … … 97 102 } 98 103 99 public static function oribi_track_woocommerce_purchase( $ order_id ) {104 public static function oribi_track_woocommerce_purchase( $result, $order_id ) { 100 105 $order = wc_get_order( $order_id ); 106 107 if ( !isset($order) ) return $result; 108 101 109 $items = $order->get_items(); 102 110 $products = array(); … … 104 112 $user_email = $order->get_billing_email(); 105 113 if ( !isset($user_email) && is_user_logged_in() ) { 106 $user_email = wp_get_current_user()->user_email; 114 $current_user = wp_get_current_user(); 115 $user_email = $current_user->user_email; 107 116 } 108 117 109 118 foreach( $items as $item ) { 110 $terms = get_the_terms ( $item->get_product_id(), 'product_cat' ); 111 112 $quantity = (int)$item->get_quantity(); 113 $price = (float)$item->get_subtotal() / $quantity; 119 $terms = get_the_terms ( $item->get_product_id(), 'product_cat' ); 120 $product = $item->get_product(); 121 $quantity = (int)$item->get_quantity(); 122 $price = $quantity > 0 ? (float)$item->get_subtotal() / $quantity : 0; 123 $productRegularPrice = (float)$product->get_regular_price(); 124 $productActivePrice = (float)$product->get_price(); 125 126 if ($productRegularPrice >= $productActivePrice) { 127 $discountPrice = $productRegularPrice - $productActivePrice; 128 } else { 129 $discountPrice = $productRegularPrice - $price; 130 } 131 $discountPrice = $discountPrice > 0 ? $discountPrice : 0; 114 132 115 133 $product = array( 116 'id' => $item->get_product_id(), 117 'name' => $item->get_name(), 118 'price' => $price, 119 'quantity' => $quantity, 120 'categories' => array(), 134 'id' => $item->get_product_id(), 135 'name' => $item->get_name(), 136 'price' => $price, 137 'taxPrice' => $quantity > 0 ? (float)$item->get_subtotal_tax() / $quantity : 0, 138 'discountPrice' => $discountPrice, 139 'quantity' => $quantity, 140 'categories' => array(), 121 141 ); 122 142 … … 135 155 'shippingPrice' => (float)$order->calculate_shipping(), 136 156 'discountPrice' => (float)$order->get_total_discount(), 157 'storeCurrency' => get_woocommerce_currency(), 137 158 'products' => $products, 138 'source' => 'WooCommerce ',159 'source' => 'WooCommerce-plugin', 139 160 ); 161 162 $customer_id = $order->get_customer_id(); 163 if ( $customer_id > 0 ) { 164 $customer = new WC_Customer( $customer_id ); 165 $data['isFirstPurchase'] = $customer->get_order_count() === 1; 166 } 140 167 $data = json_encode($data); 141 ?> 142 <script> 143 document.addEventListener( 'DOMContentLoaded', function() { 144 <?php if( isset( $user_email ) && (bool)self::get_tracking_capabilities()['email'] ): ?> 145 ORIBI.api('setUserEmail', '<?php echo $user_email ?>'); 146 <?php endif; ?> 147 ORIBI.api( 'trackIntegratePurchase', <?php echo $data ?>); 148 }); 149 </script> 150 <?php 168 169 WC()->session->set( 'trackIntegratePurchase_data' , $data ); 170 171 $tracking_capabilities = self::get_tracking_capabilities(); 172 if( isset( $user_email ) && $tracking_capabilities['email'] ) { 173 WC()->session->set( 'trackIntegratePurchase_email' , $user_email ); 174 } 175 176 return $result; 177 178 } 179 180 public static function trackIntegratePurchase() { 181 $data = WC()->session->get( 'trackIntegratePurchase_data' ); 182 $user_email = WC()->session->get( 'trackIntegratePurchase_email'); 183 184 if(!empty($data)){ 185 $tracking_capabilities = self::get_tracking_capabilities(); 186 WC()->session->set( 'trackIntegratePurchase_email' , '' ); 187 WC()->session->set( 'trackIntegratePurchase_data' , '' ); 188 ?> 189 <script> 190 document.addEventListener( 'DOMContentLoaded', function() { 191 <?php if( isset( $user_email ) && $tracking_capabilities['email'] ) : ?> 192 ORIBI.api('setUserEmail', '<?php echo $user_email ?>'); 193 <?php endif; ?> 194 ORIBI.api( 'trackIntegratePurchase', <?php echo $data ?>); 195 }); 196 </script> 197 <?php 198 } 199 151 200 } 152 201 } 153 202 154 203 Oribi_Event_Tracker::init(); 155
Note: See TracChangeset
for help on using the changeset viewer.