settings ); } /** * Constructor * Init and hook in the integration. */ public function __construct() { $this->id = 'google_analytics'; $this->method_title = __( 'Google Analytics', 'woocommerce-google-analytics-integration' ); $this->method_description = __( 'Google Analytics is a free service offered by Google that generates detailed statistics about the visitors to a website.', 'woocommerce-google-analytics-integration' ); // Load the settings $this->init_form_fields(); $this->init_settings(); add_action( 'admin_notices', array( $this, 'universal_analytics_upgrade_notice' ) ); include_once 'class-wc-abstract-google-analytics-js.php'; include_once 'class-wc-google-gtag-js.php'; if ( ! $this->disable_tracking( 'all' ) ) { $this->get_tracking_instance(); } // Display a task on "Things to do next section" add_action( 'init', array( $this, 'add_wc_setup_task' ), 20 ); // Admin Options add_filter( 'woocommerce_tracker_data', array( $this, 'track_settings' ) ); add_action( 'woocommerce_update_options_integration_google_analytics', array( $this, 'process_admin_options' ) ); add_action( 'woocommerce_update_options_integration_google_analytics', array( $this, 'show_options_info' ) ); add_action( 'admin_init', array( $this, 'privacy_policy' ) ); // utm_nooverride parameter for Google AdWords add_filter( 'woocommerce_get_return_url', array( $this, 'utm_nooverride' ) ); // Dequeue the WooCommerce Blocks Google Analytics integration, // not to let it register its `gtag` function so that we could provide a more detailed configuration. add_action( 'wp_enqueue_scripts', function () { wp_dequeue_script( 'wc-blocks-google-analytics' ); } ); } /** * Conditionally display an error notice to the merchant if the stored property ID starts with "UA" * * @return void */ public function universal_analytics_upgrade_notice() { if ( 'ua' === substr( strtolower( $this->get_option( 'ga_id' ) ), 0, 2 ) ) { printf( '
%2$s
GT-XXXXX or G-XXXXX', 'woocommerce-google-analytics-integration' ),
'type' => 'text',
'placeholder' => 'GT-XXXXX',
'default' => get_option( 'woocommerce_ga_id' ), // Backwards compat
),
'ga_support_display_advertising' => array(
'label' => __( '"Display Advertising" Support', 'woocommerce-google-analytics-integration' ),
/* translators: Read more link */
'description' => sprintf( __( 'Set the Google Analytics code to support Display Advertising. %1$sRead more about Display Advertising%2$s.', 'woocommerce-google-analytics-integration' ), '', '' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => get_option( 'woocommerce_ga_support_display_advertising' ) ? get_option( 'woocommerce_ga_support_display_advertising' ) : 'yes', // Backwards compat
),
'ga_404_tracking_enabled' => array(
'label' => __( 'Track 404 (Not found) Errors', 'woocommerce-google-analytics-integration' ),
/* translators: Read more link */
'description' => sprintf( __( 'Enable this to find broken or dead links. An "Event" with category "Error" and action "404 Not Found" will be created in Google Analytics for each incoming pageview to a non-existing page. By setting up a "Custom Goal" for these events within Google Analytics you can find out where broken links originated from (the referrer). %1$sRead how to set up a goal%2$s.', 'woocommerce-google-analytics-integration' ), '', '' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_linker_allow_incoming_enabled' => array(
'label' => __( 'Accept Incoming Linker Parameters', 'woocommerce-google-analytics-integration' ),
'description' => __( 'Enabling this option will allow incoming linker parameters from other websites.', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'no',
),
'ga_ecommerce_tracking_enabled' => array(
'title' => __( 'Event Tracking', 'woocommerce-google-analytics-integration' ),
'label' => __( 'Purchase Transactions', 'woocommerce-google-analytics-integration' ),
'description' => __( 'This requires a payment gateway that redirects to the thank you/order received page after payment. Orders paid with gateways which do not do this will not be tracked.', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => 'start',
'default' => get_option( 'woocommerce_ga_ecommerce_tracking_enabled' ) ? get_option( 'woocommerce_ga_ecommerce_tracking_enabled' ) : 'yes', // Backwards compat
),
'ga_event_tracking_enabled' => array(
'label' => __( 'Add to Cart Events', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_enhanced_remove_from_cart_enabled' => array(
'label' => __( 'Remove from Cart Events', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_enhanced_product_impression_enabled' => array(
'label' => __( 'Product Impressions from Listing Pages', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_enhanced_product_click_enabled' => array(
'label' => __( 'Product Clicks from Listing Pages', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_enhanced_product_detail_view_enabled' => array(
'label' => __( 'Product Detail Views', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_enhanced_checkout_process_enabled' => array(
'label' => __( 'Checkout Process Initiated', 'woocommerce-google-analytics-integration' ),
'type' => 'checkbox',
'checkboxgroup' => '',
'default' => 'yes',
),
'ga_linker_cross_domains' => array(
'title' => __( 'Cross Domain Tracking', 'woocommerce-google-analytics-integration' ),
/* translators: Read more link */
'description' => sprintf( __( 'Add a comma separated list of domains for automatic linking. %1$sRead more about Cross Domain Measurement%2$s', 'woocommerce-google-analytics-integration' ), '', '' ),
'type' => 'text',
'placeholder' => 'example.com, example.net',
'default' => '',
),
);
}
/**
* Shows some additional help text after saving the Google Analytics settings
*/
public function show_options_info() {
$this->method_description .= "" . __( 'Please allow Google Analytics 24 hours to start displaying results.', 'woocommerce-google-analytics-integration' ) . '
" . __( 'Please note, for transaction tracking to work properly, you will need to use a payment gateway that redirects the customer back to a WooCommerce order received/thank you page.', 'woocommerce-google-analytics-integration' ) . '
' . $policy_text . '
'; wp_add_privacy_policy_content( 'Google Analytics for WooCommerce', wpautop( $content, false ) ); } /** * Check if tracking is disabled * * @param string $type The setting to check * @return bool True if tracking for a certain setting is disabled */ private function disable_tracking( $type ) { return is_admin() || current_user_can( 'manage_options' ) || empty( $this->settings['ga_id'] ) || 'no' === $type || apply_filters( 'woocommerce_ga_disable_tracking', false, $type ); } /** * Add the utm_nooverride parameter to any return urls. This makes sure Google Adwords doesn't mistake the offsite gateway as the referrer. * * @param string $return_url WooCommerce Return URL * @return string URL */ public function utm_nooverride( $return_url ) { // We don't know if the URL already has the parameter so we should remove it just in case $return_url = remove_query_arg( 'utm_nooverride', $return_url ); // Now add the utm_nooverride query arg to the URL $return_url = add_query_arg( 'utm_nooverride', '1', $return_url ); return esc_url( $return_url, null, 'db' ); } /** * Check if the Google Analytics Tracking ID has been set up. * * @since 1.5.17 * * @return bool Whether the Google Analytics setup is completed. */ public function is_setup_complete() { return (bool) $this->get_option( 'ga_id' ); } /** * Adds the setup task to the Tasklists. * * @since 1.5.17 */ public function add_wc_setup_task() { require_once 'class-wc-google-analytics-task.php'; TaskLists::add_task( 'extended', new WC_Google_Analytics_Task( TaskLists::get_list( 'extended' ) ) ); } }