/**
 * ecommerce tracking with piwik.
 *
 * @access public
 * @param int $order_id
 * @return void
 */
function woocommerce_ecommerce_tracking_piwik($order_id)
{
    global $woocommerce;
    // Don't track admin
    if (current_user_can('manage_options')) {
        return;
    }
    // Call the Piwik ecommerce function if WP-Piwik is configured to add tracking codes to the page
    $wp_piwik_global_settings = get_option('wp-piwik_global-settings');
    // Return if Piwik settings are not here, or if global is not set
    if (!isset($wp_piwik_global_settings['add_tracking_code']) || !$wp_piwik_global_settings['add_tracking_code']) {
        return;
    }
    if (!isset($GLOBALS['wp_piwik'])) {
        return;
    }
    // Get the order and get tracking code
    $order = new WC_Order($order_id);
    ob_start();
    ?>
	try {
		// Add order items
		<?php 
    if ($order->get_items()) {
        foreach ($order->get_items() as $item) {
            $_product = $order->get_product_from_item($item);
            ?>

			piwikTracker.addEcommerceItem(
				"<?php 
            echo esc_js($_product->get_sku());
            ?>
",			// (required) SKU: Product unique identifier
				"<?php 
            echo esc_js($item['name']);
            ?>
",					// (optional) Product name
				"<?php 
            if (isset($_product->variation_data)) {
                echo esc_js(woocommerce_get_formatted_variation($_product->variation_data, true));
            }
            ?>
",	// (optional) Product category. You can also specify an array of up to 5 categories eg. ["Books", "New releases", "Biography"]
				<?php 
            echo esc_js($order->get_item_total($item));
            ?>
,	// (recommended) Product price
				<?php 
            echo esc_js($item['qty']);
            ?>
 						// (optional, default to 1) Product quantity
			);

		<?php 
        }
    }
    ?>

		// Track order
		piwikTracker.trackEcommerceOrder(
			"<?php 
    echo esc_js($order->get_order_number());
    ?>
",	// (required) Unique Order ID
			<?php 
    echo esc_js($order->get_total());
    ?>
,			// (required) Order Revenue grand total (includes tax, shipping, and subtracted discount)
			false,													// (optional) Order sub total (excludes shipping)
			<?php 
    echo esc_js($order->get_total_tax());
    ?>
,		// (optional) Tax amount
			<?php 
    echo esc_js($order->get_shipping());
    ?>
,		// (optional) Shipping amount
			false 													// (optional) Discount offered (set to false for unspecified parameter)
		);
	} catch( err ) {}
	<?php 
    $code = ob_get_clean();
    $woocommerce->add_inline_js($code);
}
예제 #2
0
/**
 * ecommerce tracking with piwik
 */
function woocommerce_ecommerce_tracking_piwik($order_id)
{
    global $woocommerce;
    if (is_admin()) {
        return;
    }
    // Don't track admin
    // Call the Piwik ecommerce function if WP-Piwik is configured to add tracking codes to the page
    $wp_piwik_global_settings = get_option('wp-piwik_global-settings');
    // Return if Piwik settings are not here, or if global is not set
    if (!isset($wp_piwik_global_settings['add_tracking_code']) || !$wp_piwik_global_settings['add_tracking_code']) {
        return;
    }
    if (!isset($GLOBALS['wp_piwik'])) {
        return;
    }
    // Remove WP-Piwik from wp_footer and run it here instead, to get Piwik
    // loaded *before* we do our ecommerce tracking calls
    remove_action('wp_footer', array($GLOBALS['wp_piwik'], 'footer'));
    $GLOBALS['wp_piwik']->footer();
    // Get the order and output tracking code
    $order = new WC_Order($order_id);
    ?>
	<script type="text/javascript">
	try {
		// Add order items
		<?php 
    if ($order->get_items()) {
        foreach ($order->get_items() as $item) {
            $_product = $order->get_product_from_item($item);
            ?>
			piwikTracker.addEcommerceItem(
				"<?php 
            echo $_product->sku;
            ?>
",	// (required) SKU: Product unique identifier
				"<?php 
            echo $item['name'];
            ?>
",		// (optional) Product name
				"<?php 
            if (isset($_product->variation_data)) {
                echo woocommerce_get_formatted_variation($_product->variation_data, true);
            }
            ?>
",	// (optional) Product category. You can also specify an array of up to 5 categories eg. ["Books", "New releases", "Biography"]
				<?php 
            echo $item['line_cost'] / $item['qty'];
            ?>
,		// (recommended) Product price
				<?php 
            echo $item['qty'];
            ?>
 		// (optional, default to 1) Product quantity
			);
		<?php 
        }
    }
    ?>
		// Track order
		piwikTracker.trackEcommerceOrder(
			"<?php 
    echo $order_id;
    ?>
",		// (required) Unique Order ID
			<?php 
    echo $order->order_total;
    ?>
,	// (required) Order Revenue grand total (includes tax, shipping, and subtracted discount)
			false,					// (optional) Order sub total (excludes shipping)
			<?php 
    echo $order->get_total_tax();
    ?>
,	// (optional) Tax amount
			<?php 
    echo $order->get_shipping();
    ?>
,	// (optional) Shipping amount
			false 					// (optional) Discount offered (set to false for unspecified parameter)
		);
	} catch( err ) {}
	</script>
	<?php 
}
예제 #3
0
 /**
  * Process the payment and return the result
  *
  * @access public
  * @param int $order_id
  * @return array
  */
 public function process_payment($order_id)
 {
     global $woocommerce;
     $this->init_mijireh();
     $mj_order = new Mijireh_Order();
     $wc_order = new WC_Order($order_id);
     // add items to order
     $items = $wc_order->get_items();
     foreach ($items as $item) {
         $product = $wc_order->get_product_from_item($item);
         $mj_order->add_item($item['name'], $wc_order->get_item_subtotal($item), $item['qty'], $product->get_sku());
     }
     // add billing address to order
     $billing = new Mijireh_Address();
     $billing->first_name = $wc_order->billing_first_name;
     $billing->last_name = $wc_order->billing_last_name;
     $billing->street = $wc_order->billing_address_1;
     $billing->apt_suite = $wc_order->billing_address_2;
     $billing->city = $wc_order->billing_city;
     $billing->state_province = $wc_order->billing_state;
     $billing->zip_code = $wc_order->billing_postcode;
     $billing->country = $wc_order->billing_country;
     $billing->company = $wc_order->billing_company;
     $billing->phone = $wc_order->billing_phone;
     if ($billing->validate()) {
         $mj_order->set_billing_address($billing);
     }
     // add shipping address to order
     $shipping = new Mijireh_Address();
     $shipping->first_name = $wc_order->shipping_first_name;
     $shipping->last_name = $wc_order->shipping_last_name;
     $shipping->street = $wc_order->shipping_address_1;
     $shipping->apt_suite = $wc_order->shipping_address_2;
     $shipping->city = $wc_order->shipping_city;
     $shipping->state_province = $wc_order->shipping_state;
     $shipping->zip_code = $wc_order->shipping_postcode;
     $shipping->country = $wc_order->shipping_country;
     $shipping->company = $wc_order->shipping_company;
     if ($shipping->validate()) {
         $mj_order->set_shipping_address($shipping);
     }
     // set order name
     $mj_order->first_name = $wc_order->billing_first_name;
     $mj_order->last_name = $wc_order->billing_last_name;
     $mj_order->email = $wc_order->billing_email;
     // set order totals
     $mj_order->total = $wc_order->get_order_total();
     $mj_order->tax = $wc_order->get_total_tax();
     $mj_order->discount = $wc_order->get_total_discount();
     $mj_order->shipping = $wc_order->get_shipping();
     // add meta data to identify woocommerce order
     $mj_order->add_meta_data('wc_order_id', $order_id);
     // Set URL for mijireh payment notificatoin - use WC API
     $mj_order->return_url = str_replace('https:', 'http:', add_query_arg('wc-api', 'WC_Mijireh_Checkout', home_url('/')));
     // Identify woocommerce
     $mj_order->partner_id = 'woo';
     try {
         $mj_order->create();
         $result = array('result' => 'success', 'redirect' => $mj_order->checkout_url);
         return $result;
     } catch (Mijireh_Exception $e) {
         $woocommerce->add_error(__('Mijireh error:', 'woocommerce') . $e->getMessage());
     }
 }
    /**
     * Google Analytics eCommerce tracking
     *
     * @access public
     * @param mixed $order_id
     * @return void
     */
    function ecommerce_tracking_code($order_id)
    {
        global $woocommerce;
        if ($this->disable_tracking($this->ga_eeT) || current_user_can("manage_options") || get_post_meta($order_id, "_tracked", true) == 1) {
            return;
        }
        $tracking_id = $this->ga_id;
        if (!$tracking_id) {
            return;
        }
        // Doing eCommerce tracking so unhook standard tracking from the footer
        remove_action("wp_footer", array($this, "ee_settings"));
        // Get the order and output tracking code
        $order = new WC_Order($order_id);
        //Get Applied Coupon Codes
        $coupons_list = '';
        if ($order->get_used_coupons()) {
            $coupons_count = count($order->get_used_coupons());
            $i = 1;
            foreach ($order->get_used_coupons() as $coupon) {
                $coupons_list .= $coupon;
                if ($i < $coupons_count) {
                    $coupons_list .= ', ';
                }
                $i++;
            }
        }
        //get domain name if value is set
        if (!empty($this->ga_Dname)) {
            $set_domain_name = esc_js($this->ga_Dname);
        } else {
            $set_domain_name = "auto";
        }
        //add display features
        if ($this->ga_DF) {
            $ga_display_feature_code = 'ga("require", "displayfeatures");';
        } else {
            $ga_display_feature_code = "";
        }
        //add Pageview on order page if user checked Add Standard UA code
        if ($this->ga_ST) {
            $ga_pageview = 'ga("send", "pageview");';
        } else {
            $ga_pageview = "";
        }
        $code = '(function(i,s,o,g,r,a,m){i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){
			(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
			m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
			})(window,document,"script","//www.google-analytics.com/analytics.js","ga");
                        
			ga("create", "' . esc_js($tracking_id) . '", "' . $set_domain_name . '");
                        ' . $ga_display_feature_code . '
			ga("require", "ec", "ec.js");
                        ' . $ga_pageview . '
                        ';
        // Order items
        if ($order->get_items()) {
            foreach ($order->get_items() as $item) {
                $_product = $order->get_product_from_item($item);
                if (isset($_product->variation_data)) {
                    $categories = esc_js(woocommerce_get_formatted_variation($_product->variation_data, true));
                } else {
                    $out = array();
                    $categories = get_the_terms($_product->id, "product_cat");
                    if ($categories) {
                        foreach ($categories as $category) {
                            $out[] = $category->name;
                        }
                    }
                    $categories = esc_js(join(",", $out));
                }
                //orderpage Prod json
                $orderpage_prod_Array[get_permalink($_product->id)] = array("tvc_id" => esc_html($_product->id), "tvc_i" => esc_js($_product->get_sku() ? $_product->get_sku() : $_product->id), "tvc_n" => esc_js($item["name"]), "tvc_p" => esc_js($order->get_item_total($item)), "tvc_c" => $categories, "tvc_q" => esc_js($item["qty"]));
            }
            //make json for prod meta data on order page
            $this->wc_version_compare("tvc_oc=" . json_encode($orderpage_prod_Array) . ";");
        }
        //get shipping cost based on version >2.1 get_total_shipping() < get_shipping
        if (version_compare($woocommerce->version, "2.1", ">=")) {
            $tvc_sc = $order->get_total_shipping();
        } else {
            $tvc_sc = $order->get_shipping();
        }
        //orderpage transcation data json
        $orderpage_trans_Array = array("id" => esc_js($order->get_order_number()), "affiliation" => esc_js(get_bloginfo('name')), "revenue" => esc_js($order->get_total()), "tax" => esc_js($order->get_total_tax()), "shipping" => esc_js($tvc_sc), "coupon" => $coupons_list);
        //make json for trans data on order page
        $this->wc_version_compare("tvc_td=" . json_encode($orderpage_trans_Array) . ";");
        $code .= '
                //set local currencies
            ga("set", "&cu", tvc_lc);  
            for(var t_item in tvc_oc){
                ga("ec:addProduct", { 
                    "id": tvc_oc[t_item].tvc_i,
                    "name": tvc_oc[t_item].tvc_n, 
                    "category": tvc_oc[t_item].tvc_c,
                    "price": tvc_oc[t_item].tvc_p,
                    "quantity": tvc_oc[t_item].tvc_q,
			});
            }
            ga("ec:setAction","purchase", {
				"id": tvc_td.id,
				"affiliation": tvc_td.affiliation,
				"revenue": tvc_td.revenue,
                                "tax": tvc_td.tax,
				"shipping": tvc_td.shipping,
                                "coupon": tvc_td.coupon
			});
                        
        ga("send", "event", "Enhanced-Ecommerce","load", "order_confirmation", {"nonInteraction": 1});      
    ';
        //check woocommerce version
        $this->wc_version_compare($code);
        update_post_meta($order_id, "_tracked", 1);
    }
 /**
  * Google Analytics eCommerce tracking
  *
  * @access public
  * @param mixed $order_id
  * @return void
  */
 function ecommerce_tracking_code($order_id)
 {
     global $woocommerce;
     if ($this->ga_ecommerce_tracking_enabled == "no" || current_user_can('manage_options') || get_post_meta($order_id, '_ga_tracked', true) == 1) {
         return;
     }
     $tracking_id = $this->ga_id;
     if (!$tracking_id) {
         return;
     }
     // Doing eCommerce tracking so unhook standard tracking from the footer
     remove_action('wp_footer', array($this, 'google_tracking_code'));
     // Get the order and output tracking code
     $order = new WC_Order($order_id);
     $loggedin = is_user_logged_in() ? 'yes' : 'no';
     if (is_user_logged_in()) {
         $user_id = get_current_user_id();
         $current_user = get_user_by('id', $user_id);
         $username = $current_user->user_login;
     } else {
         $user_id = '';
         $username = __('Guest', 'woocommerce');
     }
     if (!empty($this->ga_set_domain_name)) {
         $set_domain_name = "['_setDomainName', '" . esc_js($this->ga_set_domain_name) . "'],";
     } else {
         $set_domain_name = '';
     }
     $code = "\r\n\t\t\tvar _gaq = _gaq || [];\r\n\r\n\t\t\t_gaq.push(\r\n\t\t\t\t['_setAccount', '" . esc_js($tracking_id) . "'], " . $set_domain_name . "\r\n\t\t\t\t['_setCustomVar', 1, 'logged-in', '" . esc_js($loggedin) . "', 1],\r\n\t\t\t\t['_trackPageview']\r\n\t\t\t);\r\n\r\n\t\t\t_gaq.push(['_addTrans',\r\n\t\t\t\t'" . esc_js($order->get_order_number()) . "', // order ID - required\r\n\t\t\t\t'" . esc_js(get_bloginfo('name')) . "',  \t// affiliation or store name\r\n\t\t\t\t'" . esc_js($order->get_total()) . "',   \t    // total - required\r\n\t\t\t\t'" . esc_js($order->get_total_tax()) . "',    // tax\r\n\t\t\t\t'" . esc_js($order->get_shipping()) . "',\t    // shipping\r\n\t\t\t\t'" . esc_js($order->billing_city) . "',       // city\r\n\t\t\t\t'" . esc_js($order->billing_state) . "',      // state or province\r\n\t\t\t\t'" . esc_js($order->billing_country) . "'     // country\r\n\t\t\t]);\r\n\t\t";
     // Order items
     if ($order->get_items()) {
         foreach ($order->get_items() as $item) {
             $_product = $order->get_product_from_item($item);
             $code .= "_gaq.push(['_addItem',";
             $code .= "'" . esc_js($order->get_order_number()) . "',";
             $code .= "'" . esc_js($_product->get_sku() ? __('SKU:', 'woocommerce') . ' ' . $_product->get_sku() : $_product->id) . "',";
             $code .= "'" . esc_js($item['name']) . "',";
             if (isset($_product->variation_data)) {
                 $code .= "'" . esc_js(woocommerce_get_formatted_variation($_product->variation_data, true)) . "',";
             } else {
                 $out = array();
                 $categories = get_the_terms($_product->id, 'product_cat');
                 if ($categories) {
                     foreach ($categories as $category) {
                         $out[] = $category->name;
                     }
                 }
                 $code .= "'" . esc_js(join("/", $out)) . "',";
             }
             $code .= "'" . esc_js($order->get_item_total($item, true, true)) . "',";
             $code .= "'" . esc_js($item['qty']) . "'";
             $code .= "]);";
         }
     }
     $code .= "\r\n\t\t\t_gaq.push(['_trackTrans']); \t\t\t\t\t// submits transaction to the Analytics servers\r\n\r\n\t\t\t(function() {\r\n\t\t\t\tvar ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r\n\t\t\t\tga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r\n\t\t\t\tvar s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r\n\t\t\t})();\r\n\t\t";
     echo '<script type="text/javascript">' . $code . '</script>';
     update_post_meta($order_id, '_ga_tracked', 1);
 }
 /**
  * Returns the total shipping cost for the given order
  *
  * @since 2.0
  * @param WC_Order $order
  * @return float the shipping total
  */
 public static function get_total_shipping($order)
 {
     if (self::is_wc_version_gte_2_1()) {
         return $order->get_total_shipping();
     } else {
         return $order->get_shipping();
     }
 }
 public function onWooCheckout($order_id, $posted)
 {
     $order = new WC_Order($order_id);
     $purchaseAmount = $order->get_total() - $order->get_shipping();
     $requestTracker = new WPAM_Tracking_RequestTracker();
     $requestTracker->handleCheckout($order_id, $purchaseAmount);
 }
 /**
  * Get Order shipping total
  *
  * @param WC_Order $order
  * @return double
  */
 public static function get_total_shipping(WC_Order $order)
 {
     if (self::is_wc_2_1()) {
         return $order->get_total_shipping();
     } else {
         return $order->get_shipping();
     }
 }
 /**
  * Get order items.
  *
  * @param  WC_Order $order Order data.
  *
  * @return array           Items list, extra amount and shipping cost.
  */
 protected function get_order_items($order)
 {
     $items = array();
     $extra_amount = 0;
     $shipping_cost = 0;
     // Force only one item.
     if ('yes' == $this->gateway->send_only_total) {
         $items[] = array('description' => $this->sanitize_description(sprintf(__('Order %s', 'woocommerce-pagseguro'), $order->get_order_number())), 'amount' => $this->money_format($order->get_total()), 'quantity' => 1);
     } else {
         // Products.
         if (0 < sizeof($order->get_items())) {
             foreach ($order->get_items() as $order_item) {
                 if ($order_item['qty']) {
                     $item_name = $order_item['name'];
                     $item_meta = new WC_Order_Item_Meta($order_item['item_meta']);
                     if ($meta = $item_meta->display(true, true)) {
                         $item_name .= ' - ' . $meta;
                     }
                     $items[] = array('description' => $this->sanitize_description($item_name), 'amount' => $this->money_format($order->get_item_total($order_item, false)), 'quantity' => $order_item['qty']);
                 }
             }
         }
         // Fees.
         if (0 < sizeof($order->get_fees())) {
             foreach ($order->get_fees() as $fee) {
                 $items[] = array('description' => $this->sanitize_description($fee['name']), 'amount' => $this->money_format($fee['line_total']), 'quantity' => 1);
             }
         }
         // Taxes.
         if (0 < sizeof($order->get_taxes())) {
             foreach ($order->get_taxes() as $tax) {
                 $items[] = array('description' => $this->sanitize_description($tax['label']), 'amount' => $this->money_format($tax['tax_amount'] + $tax['shipping_tax_amount']), 'quantity' => 1);
             }
         }
         // Shipping Cost.
         if (defined('WC_VERSION') && version_compare(WC_VERSION, '2.1', '>=')) {
             $shipping_total = $order->get_total_shipping();
         } else {
             $shipping_total = $order->get_shipping();
         }
         if ($shipping_total > 0) {
             $shipping_cost = $this->money_format($shipping_total);
         }
         // Discount.
         if (defined('WC_VERSION') && version_compare(WC_VERSION, '2.3', '<')) {
             if (0 < $order->get_order_discount()) {
                 $extra_amount = '-' . $this->money_format($order->get_order_discount());
             }
         }
     }
     return array('items' => $items, 'extra_amount' => $extra_amount, 'shipping_cost' => $shipping_cost);
 }
    /**
     * Google Analytics eCommerce tracking
     **/
    function ecommerce_tracking_code($order_id)
    {
        global $woocommerce;
        if (is_admin() || current_user_can('manage_options') || $this->ga_ecommerce_tracking_enabled == "no") {
            return;
        }
        $tracking_id = $this->ga_id;
        if (!$tracking_id) {
            return;
        }
        // Doing eCommerce tracking so unhook standard tracking from the footer
        remove_action('wp_footer', array(&$this, 'google_tracking_code'));
        // Get the order and output tracking code
        $order = new WC_Order($order_id);
        $loggedin = is_user_logged_in() ? 'yes' : 'no';
        if (is_user_logged_in()) {
            $user_id = get_current_user_id();
            $current_user = get_user_by('id', $user_id);
            $username = $current_user->user_login;
        } else {
            $user_id = '';
            $username = __('Guest', 'woocommerce');
        }
        ?>
		<script type="text/javascript">
			var _gaq = _gaq || [];
			
			_gaq.push(
				['_setAccount', '<?php 
        echo $tracking_id;
        ?>
'],
				['_setCustomVar', 1, 'logged-in', '<?php 
        echo $loggedin;
        ?>
', 1],
				['_setCustomVar', 2, 'user-id', '<?php 
        echo $user_id;
        ?>
', 1],
				['_setCustomVar', 3, 'username', '<?php 
        echo $username;
        ?>
', 1],
				['_trackPageview']
			);
			
			_gaq.push(['_addTrans',
				'<?php 
        echo $order_id;
        ?>
',           		// order ID - required
				'<?php 
        bloginfo('name');
        ?>
',  				// affiliation or store name
				'<?php 
        echo $order->order_total;
        ?>
',   	// total - required
				'<?php 
        echo $order->get_total_tax();
        ?>
',   // tax
				'<?php 
        echo $order->get_shipping();
        ?>
',	// shipping
				'<?php 
        echo $order->billing_city;
        ?>
',      // city
				'<?php 
        echo $order->billing_state;
        ?>
',     // state or province
				'<?php 
        echo $order->billing_country;
        ?>
'    // country
			]);
			
			// Order items
			<?php 
        if ($order->get_items()) {
            foreach ($order->get_items() as $item) {
                $_product = $order->get_product_from_item($item);
                ?>
				_gaq.push(['_addItem',
					'<?php 
                echo $order_id;
                ?>
',           	// order ID - required
					'<?php 
                if (!empty($_product->sku)) {
                    echo __('SKU:', 'woocommerce') . ' ' . $_product->sku;
                } else {
                    echo $_product->id;
                }
                ?>
', // SKU/code - required
					'<?php 
                echo $item['name'];
                ?>
',        	// product name
					'<?php 
                if (isset($_product->variation_data)) {
                    echo woocommerce_get_formatted_variation($_product->variation_data, true);
                } else {
                    $out = array();
                    $categories = get_the_terms($_product->id, 'product_cat');
                    if ($categories) {
                        foreach ($categories as $category) {
                            $out[] = $category->name;
                        }
                    }
                    echo join("/", $out);
                }
                ?>
',   // category or variation
					'<?php 
                echo $item['line_total'] / $item['qty'];
                ?>
',         // unit price - required
					'<?php 
                echo $item['qty'];
                ?>
'           // quantity - required
				]);
			<?php 
            }
        }
        ?>
			
			_gaq.push(['_trackTrans']); 					// submits transaction to the Analytics servers
			
			(function() {
				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
			})();
		</script>
		<?php 
    }