'.__( 'Support', 'analytics-tracker' ).''; return $links; } /** * Add plugin menu * * @since 1.0.0 * @access public */ public function analyticstracker_admin_menu() { add_menu_page( __( 'Google Analytics', 'analytics-tracker' ), __( 'Google Analytics', 'analytics-tracker' ), 'manage_options', 'analyticstracker-menu', array( $this, 'analyticstracker_options_page' ), 'dashicons-chart-line' ); add_submenu_page( 'analyticstracker-menu', __( 'Other Products', 'analytics-tracker' ), __( 'Other Products', 'analytics-tracker' ), 'manage_options', 'analyticstracker-other-plugins', array( $this, 'analyticstracker_other_plugins' ) ); } /** * My others plugins * * @since 1.0.0 * @access public */ public function analyticstracker_other_plugins() { ?>

'section', 'id' => 'analyticstracker_section_settings_general', 'title' => 'General Settings', 'callback' => 'analyticstracker_description_section_callback', 'page' => 'analyticstracker_page' ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_ga', 'title' => __( 'Google Analytics tracking ID', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_general', 'args' => array ( 'id' => 'analyticstracker_ga', 'type' => 'text', 'class' => '', 'name' => 'analyticstracker_ga', 'value' => 'analyticstracker_ga', 'label_for' => '', 'description' => __( 'Add Google Analytics tracking ID (UA-XXXXXXX-YY). Where can I find my tracking ID?', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_userid', 'title' => __( 'User ID', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_general', 'args' => array ( 'id' => 'analyticstracker_userid', 'type' => 'checkbox', 'class' => '', 'name' => 'analyticstracker_userid', 'value' => 1, 'label_for' => '', 'description' => __( 'This is intended to be a known identifier for a user provided by the site owner/tracking library user.', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_anonymizeip', 'title' => __( 'Anonymize IP', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_general', 'args' => array ( 'id' => 'analyticstracker_anonymizeip', 'type' => 'checkbox', 'class' => '', 'name' => 'analyticstracker_anonymizeip', 'value' => 1, 'label_for' => '', 'description' => __( 'The IP address of the sender will be anonymized', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_displayfeatures', 'title' => __( 'Display Features', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_general', 'args' => array ( 'id' => 'analyticstracker_displayfeatures', 'type' => 'checkbox', 'class' => '', 'name' => 'analyticstracker_displayfeatures', 'value' => 1, 'label_for' => '', 'description' => __( 'The plugin works by sending an additional request to stats.g.doubleclick.net that is used to provide advertising features like remarketing and demographics and interest reporting in Google Analytics.', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_enhancedlinkatt', 'title' => __( 'Enhanced Link Attribution', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_general', 'args' => array ( 'id' => 'analyticstracker_enhancedlinkatt', 'type' => 'checkbox', 'class' => '', 'name' => 'analyticstracker_enhancedlinkatt', 'value' => 1, 'label_for' => '', 'description' => __( 'Enhanced Link Attribution improves the accuracy of your In-Page Analytics report by automatically differentiating between multiple links to the same URL on a single page by using link element IDs.', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_events', 'title' => __( 'Event Tracking', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_general', 'args' => array ( 'id' => 'analyticstracker_events', 'type' => 'checkbox', 'class' => '', 'name' => 'analyticstracker_events', 'value' => 1, 'label_for' => '', 'description' => __( 'Track events feature: Downloads, Emails, Phone numbers Error 404, Search and Outbound links, Add a comment, Scroll Depth', 'analytics-tracker' ), ) ), //Custom Dimension array( 'settings_type' => 'section', 'id' => 'analyticstracker_section_settings_custom_dimension', 'title' => 'Custom Dimension', 'callback' => 'analyticstracker_description_section_cd_callback', 'page' => 'analyticstracker_page' ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_custom_dimension', 'title' => __( 'Custom Dimension', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_custom_dimension', 'type' => 'checkbox', 'class' => '', 'name' => 'analyticstracker_custom_dimension', 'value' => 1, 'label_for' => '', 'description' => __( 'Enable Custom Dimension', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_cu_tags', 'title' => __( 'Tags', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_cu_tags', 'type' => 'text', 'class' => 'small-text', 'name' => 'analyticstracker_cu_tags', 'value' => '', 'default' => '1', 'label_for' => 'analyticstracker_cu_tags', 'description' => __( 'The index suffix for tags', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_cu_category', 'title' => __( 'Category', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_cu_category', 'type' => 'text', 'class' => 'small-text', 'name' => 'analyticstracker_cu_category', 'value' => '', 'default' => '2', 'label_for' => 'analyticstracker_cu_category', 'description' => __( 'The index suffix for category', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_cu_archive', 'title' => __( 'Archive', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_cu_archive', 'type' => 'text', 'class' => 'small-text', 'name' => 'analyticstracker_cu_archive', 'value' => '', 'default' => '3', 'label_for' => 'analyticstracker_cu_archive', 'description' => __( 'The index suffix for archive', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_cu_author', 'title' => __( 'Author', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_cu_author', 'type' => 'text', 'class' => 'small-text', 'name' => 'analyticstracker_cu_author', 'value' => '', 'default' => '4', 'label_for' => 'analyticstracker_cu_author', 'description' => __( 'The index suffix for author', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_cu_post_format', 'title' => __( 'Post Format', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_cu_post_format', 'type' => 'text', 'class' => 'small-text', 'name' => 'analyticstracker_cu_post_format', 'value' => '', 'default' => '5', 'label_for' => 'analyticstracker_cu_post_format', 'description' => __( 'The index suffix for Post Format', 'analytics-tracker' ), ) ), array ( 'settings_type' => 'field', 'id' => 'analyticstracker_cu_post_type', 'title' => __( 'Post Type', 'analytics-tracker' ), 'callback' => 'analyticstracker_settings_field_render', 'page' => 'analyticstracker_page', 'section' => 'analyticstracker_section_settings_custom_dimension', 'args' => array ( 'id' => 'analyticstracker_cu_post_type', 'type' => 'text', 'class' => 'small-text', 'name' => 'analyticstracker_cu_post_type', 'value' => '', 'default' => '6', 'label_for' => 'analyticstracker_cu_post_type', 'description' => __( 'The index suffix for Post Type', 'analytics-tracker' ), ) ), ); } /** * Get Goolge Analytics code * * @since 1.0.2 * @access public */ public function analyticstracker_ga_get() { $saved_options = get_option( 'analyticstracker_settings' ); $analyticstracker_gtag_general = $analyticstracker_gtag_events = ''; if ( preg_match( "/UA-[0-9]{3,9}-[0-9]{1,4}/", $saved_options['analyticstracker_ga'] ) ) { global $post; /** * User Identification * * @since 2.0.0 */ if ( is_user_logged_in() ) { $current_user = wp_get_current_user(); if ( isset( $saved_options['analyticstracker_userid'] ) && $saved_options['analyticstracker_userid'] != '' ) { $analyticstracker_gtag_general['user_id'] = $current_user->ID; } } /** * IP anonymization * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_anonymizeip'] ) && $saved_options['analyticstracker_anonymizeip'] != '' ) { $analyticstracker_gtag_general['anonymize_ip'] = true; } /** * Display Features * * @since 2.0.0 */ if ( ! isset( $saved_options['analyticstracker_displayfeatures'] ) ) { $analyticstracker_gtag_general['allow_display_features'] = false; } /** * Enhanced Link Attribution * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_enhancedlinkatt'] ) && $saved_options['analyticstracker_enhancedlinkatt'] != '' ) { $analyticstracker_gtag_general['link_attribution'] = true; } if ( isset( $saved_options['analyticstracker_events'] ) && $saved_options['analyticstracker_events'] != '' ) { /** * Search Event * * @since 2.0.0 */ if ( is_search() ) { $analyticstracker_gtag_events[] = array( 'event', 'keyword', array( 'event_category' => 'Search', 'event_label' => get_search_query( true ), ), ); } if ( is_singular() ) { /** * Comments Event * * @since 2.0.0 */ $args = array( 'meta_key' => 'analyticstracker_comment_event', 'post_id' => $post->ID, ); $at_comments = get_comments($args); foreach( $at_comments as $at_comment ){ $analyticstracker_gtag_events[] = array( 'event', $at_comment->comment_author, array( 'event_category' => 'Comments', 'event_label' => 'Post ID: '.$at_comment->comment_post_ID.' | Comment ID: '.$at_comment->comment_ID, ), ); delete_comment_meta( $at_comment->comment_ID, 'analyticstracker_comment_event' ); } /** * Custom Dimension * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_custom_dimension'] ) && $saved_options['analyticstracker_custom_dimension'] != '' ) { /** * Custom Dimension for tags * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_cu_tags'] ) && $saved_options['analyticstracker_cu_tags'] != '' ) { if ( (int)$saved_options['analyticstracker_cu_tags'] AND ( $saved_options['analyticstracker_cu_tags'] > 0 && $saved_options['analyticstracker_cu_tags'] < 201 ) ) { $at_post_tags = get_the_tags(); if ($at_post_tags) { foreach($at_post_tags as $tag) { $at_post_tags_array[] = $tag->name; } $at_post_tags_cu = implode( '|', $at_post_tags_array ); } else { $at_post_tags_cu = __( 'No Tags', 'analytics-tracker' ); } $analyticstracker_gtag_general['custom_map']['dimension'.$saved_options['analyticstracker_cu_tags']] = 'analyticstracker_cu_tags'; $analyticstracker_gtag_events[] = array( 'event', 'atracker_gtag', array( 'analyticstracker_cu_tags' => $at_post_tags_cu, 'non_interaction' => true, ), ); } } /** * Custom Dimension for category * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_cu_category'] ) && $saved_options['analyticstracker_cu_category'] != '' ) { if ( (int)$saved_options['analyticstracker_cu_category'] AND ( $saved_options['analyticstracker_cu_category'] > 0 && $saved_options['analyticstracker_cu_category'] < 201 ) ) { $at_post_categories = get_the_category(); if ( $at_post_categories ) { foreach($at_post_categories as $category) { $at_post_categories_array[] = $category->name; } $at_post_categories_cu = implode( '|', $at_post_categories_array ); } else { $at_post_categories_cu = __( 'No Category', 'analytics-tracker' ); } $analyticstracker_gtag_general['custom_map']['dimension'.$saved_options['analyticstracker_cu_category']] = 'analyticstracker_cu_category'; $analyticstracker_gtag_events[] = array( 'event', 'atracker_gtag', array( 'analyticstracker_cu_category' => $at_post_categories_cu, 'non_interaction' => true, ), ); } } /** * Custom Dimension for archive * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_cu_archive'] ) && $saved_options['analyticstracker_cu_archive'] != '' ) { if ( (int)$saved_options['analyticstracker_cu_archive'] AND ( $saved_options['analyticstracker_cu_archive'] > 0 && $saved_options['analyticstracker_cu_archive'] < 201 ) ) { $analyticstracker_gtag_general['custom_map']['dimension'.$saved_options['analyticstracker_cu_archive']] = 'analyticstracker_cu_archive'; $analyticstracker_gtag_events[] = array( 'event', 'atracker_gtag', array( 'analyticstracker_cu_archive' => get_the_date('Y|m|N|A'), 'non_interaction' => true, ), ); } } /** * Custom Dimension for author * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_cu_author'] ) && $saved_options['analyticstracker_cu_author'] != '' ) { if ( (int)$saved_options['analyticstracker_cu_author'] AND ( $saved_options['analyticstracker_cu_author'] > 0 && $saved_options['analyticstracker_cu_author'] < 201 ) ) { $analyticstracker_gtag_general['custom_map']['dimension'.$saved_options['analyticstracker_cu_author']] = 'analyticstracker_cu_author'; $analyticstracker_gtag_events[] = array( 'event', 'atracker_gtag', array( 'analyticstracker_cu_author' => get_the_author_meta( 'display_name', $post->post_author ), 'non_interaction' => true, ), ); } } /** * Custom Dimension for Post Format * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_cu_post_format'] ) && $saved_options['analyticstracker_cu_post_format'] != '' ) { if ( (int)$saved_options['analyticstracker_cu_post_format'] AND ( $saved_options['analyticstracker_cu_post_format'] > 0 && $saved_options['analyticstracker_cu_post_format'] < 201 ) ) { $postformat = get_post_format() ? : 'standard'; $analyticstracker_gtag_general['custom_map']['dimension'.$saved_options['analyticstracker_cu_post_format']] = 'analyticstracker_cu_post_format'; $analyticstracker_gtag_events[] = array( 'event', 'atracker_gtag', array( 'analyticstracker_cu_post_format' => $postformat, 'non_interaction' => true, ), ); } } /** * Custom Dimension for Post Type * * @since 2.0.0 */ if ( isset( $saved_options['analyticstracker_cu_post_type'] ) && $saved_options['analyticstracker_cu_post_type'] != '' ) { if ( (int)$saved_options['analyticstracker_cu_post_type'] AND ( $saved_options['analyticstracker_cu_post_type'] > 0 && $saved_options['analyticstracker_cu_post_type'] < 201 ) ) { $analyticstracker_gtag_general['custom_map']['dimension'.$saved_options['analyticstracker_cu_post_type']] = 'analyticstracker_cu_post_type'; $analyticstracker_gtag_events[] = array( 'event', 'atracker_gtag', array( 'analyticstracker_cu_post_type' => $post->post_type, 'non_interaction' => true, ), ); } } } } } return $analyticstracker_gtag = array( 'general' => $analyticstracker_gtag_general, 'events' => $analyticstracker_gtag_events, ); } } /** * Insert Google Analytics code * * @since 1.0.0 * @access public */ public function analyticstracker_ga_script() { $saved_options = get_option( 'analyticstracker_settings' ); $analyticstracker = $this->analyticstracker_ga_get(); $analyticstracker_config = ", ".str_replace( array( '[', ']' ), '', htmlspecialchars( wp_json_encode( $analyticstracker['general'] ), ENT_NOQUOTES ) ); $analyticstracker_events = ''; if ( ! empty( $analyticstracker['events'] ) ) { foreach ( $analyticstracker['events'] as $key => $value) { $analyticstracker_events .= "gtag(".str_replace( array( '[', ']' ), '', htmlspecialchars( wp_json_encode( $value ), ENT_NOQUOTES) ).");\r\n"; } }; if( preg_match("/UA-[0-9]{3,9}-[0-9]{1,4}/", $saved_options['analyticstracker_ga']) ) { ?> comment_approved == 1) { add_comment_meta( $comment_id, 'analyticstracker_comment_event', 1, true ); } } /** * Description Section callback * * @since 1.0.0 * @access public */ public function analyticstracker_description_section_callback( ) { } /** * Description Section callback for Custom Dimension * * @since 1.0.0 * @access public */ public function analyticstracker_description_section_cd_callback( ) { _e( 'Each custom dimension has an associated index. There is a maximum of 20 custom dimensions (200 for Premium accounts). The index suffix must be a positive integer greater than 0. How to set up custom dimensions', 'analytics-tracker' ); } /* * Setting Initialization * * @since 1.0.0 * @access public */ public function analyticstracker_settings_init() { register_setting( 'analyticstracker_page', 'analyticstracker_settings' ); foreach ( $this->analyticstracker_settings() AS $setting ) { if ($setting['settings_type'] === 'section') { add_settings_section( $setting['id'], $setting['title'], array( $this, $setting['callback'] ), $setting['page'] ); } if ($setting['settings_type'] === 'field') { add_settings_field( $setting['id'], $setting['title'], array( $this, $setting['callback'] ), $setting['page'], $setting['section'], $setting['args'] ); } } } /** * Append a settings field to the the fields section. * * @since 1.0.0 * @access public * @param array $args */ public function analyticstracker_settings_field_render( array $options = array() ) { $saved_options = get_option( 'analyticstracker_settings' ); $atts = array( 'id' => $options['id'], 'type' => ( isset( $options['type'] ) ? $options['type'] : 'text' ), 'class' => $options['class'], 'name' => 'analyticstracker_settings[' . $options['name'] . ']', 'value' => ( array_key_exists( 'default', $options ) ? $options['default'] : null ), 'label_for' => ( array_key_exists( 'label_for', $options ) ? $options['label_for'] : false ), 'description' => ( array_key_exists( 'description', $options ) ? $options['description'] : false ) ); if ( isset( $options['id'] ) ) { if ( isset( $saved_options[$options['id']] ) AND ( $saved_options[$options['id']] != '') ) { $val = $saved_options[$options['id']]; } else { $val = ( array_key_exists( 'default', $options ) ? $options['default'] : '' ); } $atts['value'] = $val; } if ( isset( $options['type'] ) && $options['type'] == 'checkbox' ) { if ( $atts['value'] ) { $atts['checked'] = 'checked'; } $atts['value'] = true; } /** * Input type Checkbox */ if ($atts['type'] == 'checkbox') { $html = sprintf( '', $atts['type'], $atts['class'], $atts['id'], $atts['name'], $atts['value'], ( isset( $atts['checked'] ) ? "checked=".$atts['checked'] : '') ); if ( array_key_exists( 'description', $atts ) ){ $html .= sprintf( '

%1$s

', $atts['description'] ); } echo $html; } /** * Input type Text */ if ($atts['type'] == 'text') { $html = sprintf( '', $atts['type'], $atts['class'], $atts['id'], $atts['name'], $atts['value'] ); if ( array_key_exists( 'description', $atts ) ){ $html .= sprintf( '

%1$s

', $atts['description'] ); } echo $html; } /** * Input type Textarea */ if ($atts['type'] == 'textarea') { $html = sprintf( '', $atts['class'], $atts['id'], $atts['name'], $atts['value'] ); if ( array_key_exists( 'description', $atts ) ){ $html .= sprintf( '

%1$s

', $atts['description'] ); } echo $html; } } /** * Generate settings form * * @since 1.0.0 * @access public */ public function analyticstracker_options_page() { ?>