PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.1.3
Jetpack – WP Security, Backup, Speed, & Growth v12.1.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / google-analytics / classes / class-jetpack-google-amp-analytics.php
jetpack / modules / google-analytics / classes Last commit date
class-jetpack-google-amp-analytics.php 3 years ago wp-google-analytics-legacy.php 3 years ago wp-google-analytics-options.php 4 years ago wp-google-analytics-universal.php 3 years ago wp-google-analytics-utils.php 4 years ago
class-jetpack-google-amp-analytics.php
159 lines
1 <?php
2 /**
3 * Add support for Google Analytics e-commerce events for AMP pages.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Bail if accessed directly
10 */
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13 }
14
15 /**
16 * Jetpack_Google_AMP_Analytics class.
17 */
18 class Jetpack_Google_AMP_Analytics {
19 /**
20 * Constructor method.
21 */
22 public function __construct() {
23 $this->maybe_load_hooks();
24 }
25
26 /**
27 * Maybe load the hooks.
28 * Checks if its AMP request, if WooCommerce is available, if DNT is disabled, if there's tracking code and if tracking is enabled.
29 */
30 public function maybe_load_hooks() {
31 if ( ! class_exists( 'Jetpack_AMP_Support' ) || ! Jetpack_AMP_Support::is_amp_request() ) {
32 return;
33 }
34
35 if ( ! class_exists( 'WooCommerce' ) ) {
36 return;
37 }
38
39 if ( ! Jetpack_Google_Analytics_Options::has_tracking_code() ) {
40 return;
41 }
42
43 if ( Jetpack_Google_Analytics_Utils::is_dnt_enabled() ) {
44 return;
45 }
46
47 if ( ! Jetpack_Google_Analytics_Options::track_add_to_cart_is_enabled() ) {
48 return;
49 }
50
51 add_action( 'woocommerce_add_to_cart', array( $this, 'amp_add_to_cart' ), 10, 6 );
52 add_action( 'woocommerce_thankyou', array( $this, 'amp_after_purchase' ), 10, 1 );
53 add_action( 'wp_footer', array( $this, 'amp_send_ga_events' ) );
54 }
55
56 /**
57 * Generate a GA event when adding an item to the cart.
58 *
59 * @param string $cart_item_key Cart item key.
60 * @param string $product_id Product ID.
61 * @param int $quantity Product quantity.
62 * @param int $variation_id Product variation ID.
63 * @param object $variation Product variation.
64 * @param object $cart_item_data Cart item data.
65 */
66 public function amp_add_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
67 $product = wc_get_product( $product_id );
68 if ( $product ) {
69 $product_sku = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
70 $product_name = $product->get_name();
71
72 $events = WC()->session->get( 'wc_ga_events' );
73 $events[] = array(
74 'type' => 'add',
75 'ga_params' => array(
76 'pa' => 'add',
77 'pr1id' => sanitize_text_field( $product_sku ),
78 'pr1nm' => sanitize_text_field( $product_name ),
79 'pr1qt' => absint( $quantity ),
80 ),
81 );
82 WC()->session->set( 'wc_ga_events', $events );
83 }
84 }
85
86 /**
87 * Generate a GA event when removing an item to the cart.
88 *
89 * @param int $order_id The Order ID.
90 */
91 public function amp_after_purchase( $order_id ) {
92 $events = WC()->session->get( 'wc_ga_events' );
93 $order = wc_get_order( $order_id );
94 $order_total = $order->get_total();
95 $order_tax = $order->get_total_tax();
96
97 $i = 1;
98 $event = array(
99 'type' => 'purchase',
100 'ga_params' => array(
101 'pa' => 'purchase',
102 'ti' => absint( $order_id ),
103 'tr' => (float) $order_total,
104 'tt' => (float) $order_tax,
105 ),
106 );
107 foreach ( $order->get_items() as $item ) {
108 $product = $item->get_product();
109 if ( $product ) {
110 $event['ga_params'][ 'pr' . $i . 'id' ] = sanitize_text_field( Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product ) );
111 $event['ga_params'][ 'pr' . $i . 'nm' ] = sanitize_text_field( $item->get_name() );
112 $event['ga_params'][ 'pr' . $i . 'qt' ] = absint( $item->get_quantity() );
113 ++$i;
114 }
115 }
116
117 $events[] = $event;
118 WC()->session->set( 'wc_ga_events', $events );
119 }
120
121 /**
122 * Send the stored events to GA.
123 */
124 public function amp_send_ga_events() {
125 if ( ! isset( $_SERVER['REQUEST_METHOD'] ) || 'GET' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash -- Simple comparison
126 return;
127 }
128
129 $events = WC()->session->get( 'wc_ga_events' );
130 if ( ! is_array( $events ) ) {
131 return;
132 }
133
134 foreach ( $events as $event ) {
135 ?>
136 <amp-analytics type='googleanalytics'>
137 <script type='application/json'>
138 {
139 "vars": {
140 "account": "<?php echo esc_html( Jetpack_Google_Analytics_Options::get_tracking_code() ); ?>"
141 },
142 "triggers": {
143 "trackPageview": {
144 "on": "visible",
145 "request": "pageview",
146 "extraUrlParams": <?php echo wp_json_encode( $event['ga_params'] ); ?>
147 }
148 }
149 }
150 </script>
151 </amp-analytics>
152 <?php
153
154 array_shift( $events );
155 }
156 WC()->session->set( 'wc_ga_events', $events );
157 }
158 }
159