Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
gtm4wp/public/frontend.php /
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
1058 lines (886 sloc)
40.8 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| define( 'GTM4WP_WPFILTER_COMPILE_DATALAYER', 'gtm4wp_compile_datalayer' ); | |
| define( 'GTM4WP_WPFILTER_COMPILE_REMARKTING', 'gtm4wp_compile_remarkering' ); | |
| define( 'GTM4WP_WPFILTER_AFTER_DATALAYER', 'gtm4wp_after_datalayer' ); | |
| define( 'GTM4WP_WPFILTER_GETTHEGTMTAG', 'gtm4wp_get_the_gtm_tag' ); | |
| define( 'GTM4WP_WPFILTER_ADDGLOBALVARS', 'gtm4wp_add_global_vars' ); | |
| $GLOBALS['gtm4wp_container_code_written'] = false; | |
| // check for empty is needed to prevent error in WP CLI | |
| // bugfix by Patrick Holberg Hesselberg | |
| if ( empty( $GLOBALS['gtm4wp_options'] ) || ( $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_DATALAYER_NAME ] == '' ) ) { | |
| $GLOBALS['gtm4wp_datalayer_name'] = 'dataLayer'; | |
| } else { | |
| $GLOBALS['gtm4wp_datalayer_name'] = $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_DATALAYER_NAME ]; | |
| } | |
| // Setting Global Variable to Store JSON based Datalayer for Intergrations | |
| $GLOBALS['gtm4wp_datalayer_json'] = ''; | |
| $GLOBALS['gtm4wp_datalayer_globalvars'] = ''; | |
| // Moving include to top due to hierarchy of includes | |
| if ( isset( $GLOBALS['gtm4wp_options'] ) && ( '' != $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_INTEGRATE_AMPID ] ) ) { | |
| require_once dirname( __FILE__ ) . '/../integration/amp.php'; | |
| } | |
| if ( ! function_exists( 'gtm4wp_amp_running' ) ) { | |
| function gtm4wp_amp_running() { | |
| return false; | |
| } | |
| } | |
| /** | |
| * Converts bool false to string false for JS | |
| * | |
| * @author Vincent Koc <https://github.com/koconder/> | |
| * @return mixed Returs object or string false | |
| */ | |
| function gtm4wp_escjs_boolean( $obj ) { | |
| if ( empty( $obj ) || is_null( $obj ) || ! $obj ) { | |
| return 'false'; | |
| } else { | |
| return $obj; | |
| } | |
| } | |
| /** | |
| * Original copyright: | |
| * By Grant Burton @ BURTONTECH.COM | |
| * | |
| * Code improved by Thomas Geiger | |
| */ | |
| function gtm4wp_get_user_ip() { | |
| if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { | |
| foreach ( explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) as $ip ) { | |
| if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) { | |
| return $ip; | |
| } | |
| } | |
| } | |
| $possible_ip_variables = array( | |
| 'HTTP_CLIENT_IP', | |
| 'HTTP_X_FORWARDED', | |
| 'HTTP_X_CLUSTER_CLIENT_IP', | |
| 'HTTP_FORWARDED_FOR', | |
| 'HTTP_FORWARDED', | |
| 'REMOTE_ADDR' | |
| ); | |
| foreach( $possible_ip_variables as $one_ip_variable ) { | |
| if ( | |
| ! empty( $_SERVER[ $one_ip_variable ] ) | |
| && ( filter_var( $_SERVER[ $one_ip_variable ], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) | |
| ) { | |
| return $_SERVER[ $one_ip_variable ]; | |
| } | |
| } | |
| return ''; | |
| } | |
| if ( ! function_exists( 'getallheaders' ) ) { | |
| function getallheaders() { | |
| $headers = array(); | |
| foreach ( $_SERVER as $name => $value ) { | |
| if ( substr( $name, 0, 5 ) == 'HTTP_' ) { | |
| $headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value; | |
| } | |
| } | |
| return $headers; | |
| } | |
| } | |
| function gtm4wp_add_basic_datalayer_data( $dataLayer ) { | |
| global $wp_query, $gtm4wp_options, $gtm4wp_entity_ids; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_DONOTTRACK ] ) { | |
| if ( ! empty( $_SERVER['HTTP_DNT'] ) ) { | |
| $dataLayer['visitorDoNotTrack'] = (int) ( $_SERVER['HTTP_DNT'] ); | |
| } else { | |
| $dataLayer['visitorDoNotTrack'] = 0; | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_SITEID ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_SITENAME ] ) { | |
| $dataLayer['siteID'] = 0; | |
| $dataLayer['siteName'] = ''; | |
| if ( function_exists( 'get_blog_details' ) ) { | |
| $gtm4wp_blogdetails = get_blog_details(); | |
| $dataLayer['siteID'] = $gtm4wp_blogdetails->blog_id; | |
| $dataLayer['siteName'] = $gtm4wp_blogdetails->blogname; | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_LOGGEDIN ] ) { | |
| if ( is_user_logged_in() ) { | |
| $dataLayer['visitorLoginState'] = 'logged-in'; | |
| } else { | |
| $dataLayer['visitorLoginState'] = 'logged-out'; | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERROLE ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USEREMAIL ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERREGDATE ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERNAME ] ) { | |
| $current_user = wp_get_current_user(); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERROLE ] ) { | |
| $dataLayer['visitorType'] = ( $current_user->ID == 0 ? 'visitor-logged-out' : implode(",", $current_user->roles) ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USEREMAIL ] ) { | |
| $dataLayer['visitorEmail'] = ( empty( $current_user->user_email ) ? '' : $current_user->user_email ); | |
| $dataLayer['visitorEmailHash'] = ( empty( $current_user->user_email ) ? '' : hash( 'sha256', $current_user->user_email ) ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERREGDATE ] ) { | |
| $dataLayer['visitorRegistrationDate'] = ( empty( $current_user->user_registered ) ? '' : strtotime( $current_user->user_registered ) ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERNAME ] ) { | |
| $dataLayer['visitorUsername'] = ( empty( $current_user->user_login ) ? '' : $current_user->user_login ); | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_USERID ] ) { | |
| $_gtm4wp_userid = get_current_user_id(); | |
| if ( $_gtm4wp_userid > 0 ) { | |
| $dataLayer['visitorId'] = $_gtm4wp_userid; | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_VISITOR_IP ] ) { | |
| $dataLayer['visitorIP'] = esc_js( gtm4wp_get_user_ip() ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTTITLE ] ) { | |
| $dataLayer['pageTitle'] = strip_tags( wp_title( '|', false, 'right' ) ); | |
| } | |
| if ( is_singular() ) { | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTTYPE ] ) { | |
| $dataLayer['pagePostType'] = get_post_type(); | |
| $dataLayer['pagePostType2'] = 'single-' . get_post_type(); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_CATEGORIES ] ) { | |
| $_post_cats = get_the_category(); | |
| if ( $_post_cats ) { | |
| $dataLayer['pageCategory'] = array(); | |
| foreach ( $_post_cats as $_one_cat ) { | |
| $dataLayer['pageCategory'][] = $_one_cat->slug; | |
| } | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_TAGS ] ) { | |
| $_post_tags = get_the_tags(); | |
| if ( $_post_tags ) { | |
| $dataLayer['pageAttributes'] = array(); | |
| foreach ( $_post_tags as $_one_tag ) { | |
| $dataLayer['pageAttributes'][] = $_one_tag->slug; | |
| } | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_AUTHORID ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_AUTHOR ] ) { | |
| $postuser = get_userdata( $GLOBALS['post']->post_author ); | |
| if ( false !== $postuser ) { | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_AUTHORID ] ) { | |
| $dataLayer['pagePostAuthorID'] = $postuser->ID; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_AUTHOR ] ) { | |
| $dataLayer['pagePostAuthor'] = $postuser->display_name; | |
| } | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTDATE ] ) { | |
| $dataLayer['pagePostDate'] = get_the_date(); | |
| $dataLayer['pagePostDateYear'] = get_the_date( 'Y' ); | |
| $dataLayer['pagePostDateMonth'] = get_the_date( 'm' ); | |
| $dataLayer['pagePostDateDay'] = get_the_date( 'd' ); | |
| $dataLayer['pagePostDateDayName'] = get_the_date( 'l' ); | |
| $dataLayer['pagePostDateHour'] = get_the_date( 'H' ); | |
| $dataLayer['pagePostDateMinute'] = get_the_date( 'i' ); | |
| $dataLayer['pagePostDateIso'] = get_the_date( 'c' ); | |
| $dataLayer['pagePostDateUnix'] = get_the_date( 'U' ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTTERMLIST ] ) { | |
| $dataLayer["pagePostTerms"] = array(); | |
| $object_taxonomies = get_object_taxonomies( get_post_type() ); | |
| foreach( $object_taxonomies as $one_object_taxonomy ) { | |
| $post_taxonomy_values = get_the_terms( $GLOBALS[ "post" ]->ID, $one_object_taxonomy ); | |
| if ( is_array( $post_taxonomy_values ) ) { | |
| $dataLayer["pagePostTerms"][$one_object_taxonomy] = array(); | |
| foreach( $post_taxonomy_values as $one_taxonomy_value ) { | |
| $dataLayer["pagePostTerms"][$one_object_taxonomy][] = $one_taxonomy_value->name; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| if ( is_archive() || is_post_type_archive() ) { | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTTYPE ] ) { | |
| $dataLayer['pagePostType'] = get_post_type(); | |
| if ( is_category() ) { | |
| $dataLayer['pagePostType2'] = 'category-' . get_post_type(); | |
| } elseif ( is_tag() ) { | |
| $dataLayer['pagePostType2'] = 'tag-' . get_post_type(); | |
| } elseif ( is_tax() ) { | |
| $dataLayer['pagePostType2'] = 'tax-' . get_post_type(); | |
| } elseif ( is_author() ) { | |
| $dataLayer['pagePostType2'] = 'author-' . get_post_type(); | |
| } elseif ( is_year() ) { | |
| $dataLayer['pagePostType2'] = 'year-' . get_post_type(); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTDATE ] ) { | |
| $dataLayer['pagePostDateYear'] = get_the_date( 'Y' ); | |
| } | |
| } elseif ( is_month() ) { | |
| $dataLayer['pagePostType2'] = 'month-' . get_post_type(); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTDATE ] ) { | |
| $dataLayer['pagePostDateYear'] = get_the_date( 'Y' ); | |
| $dataLayer['pagePostDateMonth'] = get_the_date( 'm' ); | |
| } | |
| } elseif ( is_day() ) { | |
| $dataLayer['pagePostType2'] = 'day-' . get_post_type(); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTDATE ] ) { | |
| $dataLayer['pagePostDate'] = get_the_date(); | |
| $dataLayer['pagePostDateYear'] = get_the_date( 'Y' ); | |
| $dataLayer['pagePostDateMonth'] = get_the_date( 'm' ); | |
| $dataLayer['pagePostDateDay'] = get_the_date( 'd' ); | |
| } | |
| } elseif ( is_time() ) { | |
| $dataLayer['pagePostType2'] = 'time-' . get_post_type(); | |
| } elseif ( is_date() ) { | |
| $dataLayer['pagePostType2'] = 'date-' . get_post_type(); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTDATE ] ) { | |
| $dataLayer['pagePostDate'] = get_the_date(); | |
| $dataLayer['pagePostDateYear'] = get_the_date( 'Y' ); | |
| $dataLayer['pagePostDateMonth'] = get_the_date( 'm' ); | |
| $dataLayer['pagePostDateDay'] = get_the_date( 'd' ); | |
| } | |
| } | |
| } | |
| if ( ( is_tax() || is_category() ) && $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_CATEGORIES ] ) { | |
| $_post_cats = get_the_category(); | |
| $dataLayer['pageCategory'] = array(); | |
| foreach ( $_post_cats as $_one_cat ) { | |
| $dataLayer['pageCategory'][] = $_one_cat->slug; | |
| } | |
| } | |
| if ( ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_AUTHORID ] ) && ( is_author() ) ) { | |
| global $authordata; | |
| $dataLayer['pagePostAuthorID'] = isset( $authordata->ID ) ? $authordata->ID : 0; | |
| } | |
| if ( ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_AUTHOR ] ) && ( is_author() ) ) { | |
| $dataLayer['pagePostAuthor'] = get_the_author(); | |
| } | |
| } | |
| if ( is_search() ) { | |
| $dataLayer['pagePostType'] = 'search-results'; | |
| $dataLayer['siteSearchTerm'] = get_search_query(); | |
| $dataLayer['siteSearchFrom'] = ''; | |
| if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) { | |
| $referer_url_parts = explode( '?', $_SERVER['HTTP_REFERER'] ); | |
| if ( count( $referer_url_parts ) > 1 ) { | |
| $dataLayer['siteSearchFrom'] = $referer_url_parts[0] . '?' . rawurlencode( $referer_url_parts[1] ); | |
| } else { | |
| $dataLayer['siteSearchFrom'] = $referer_url_parts[0]; | |
| } | |
| } | |
| $dataLayer['siteSearchResults'] = $wp_query->post_count; | |
| } | |
| if ( is_front_page() && $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTTYPE ] ) { | |
| $dataLayer['pagePostType'] = 'frontpage'; | |
| } | |
| if ( ! is_front_page() && is_home() && $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTTYPE ] ) { | |
| $dataLayer['pagePostType'] = 'bloghome'; | |
| } | |
| if ( is_404() ) { | |
| $dataLayer['pagePostType'] = '404-error'; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_BROWSERDATA ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_OSDATA ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_DEVICEDATA ] ) { | |
| spl_autoload_register( | |
| function( $class ) { | |
| $class_parts = explode( '\\', $class ); | |
| if ( 'WhichBrowser' == $class_parts[0] ) { | |
| include dirname( __FILE__ ) . '/../integration/whichbrowser/' . str_replace( array( 'WhichBrowser', '\\' ), array( 'src', '/' ), $class ) . '.php'; | |
| } | |
| } | |
| ); | |
| require_once dirname( __FILE__ ) . '/../integration/whichbrowser/src/Parser.php'; | |
| $gtp4wp_headers = getallheaders(); | |
| if ( ( false === $gtp4wp_headers ) && isset( $_SERVER['HTTP_USER_AGENT'] ) ) { | |
| $gtp4wp_headers = $_SERVER['HTTP_USER_AGENT']; | |
| } | |
| if ( false !== $gtp4wp_headers ) { | |
| $detected = new WhichBrowser\Parser( $gtp4wp_headers ); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_BROWSERDATA ] ) { | |
| $dataLayer['browserName'] = isset( $detected->browser->name ) ? $detected->browser->name : ''; | |
| $dataLayer['browserVersion'] = isset( $detected->browser->version->value ) ? $detected->browser->version->value : ''; | |
| $dataLayer['browserEngineName'] = isset( $detected->engine->name ) ? $detected->engine->name : ''; | |
| $dataLayer['browserEngineVersion'] = isset( $detected->engine->version->value ) ? $detected->engine->version->value : ''; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_OSDATA ] ) { | |
| $dataLayer['osName'] = isset( $detected->os->name ) ? $detected->os->name : ''; | |
| $dataLayer['osVersion'] = isset( $detected->os->version->value ) ? $detected->os->version->value : ''; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_DEVICEDATA ] ) { | |
| $dataLayer['deviceType'] = isset( $detected->device->type ) ? $detected->device->type : ''; | |
| $dataLayer['deviceManufacturer'] = isset( $detected->device->manufacturer ) ? $detected->device->manufacturer : ''; | |
| $dataLayer['deviceModel'] = isset( $detected->device->model ) ? $detected->device->model : ''; | |
| } | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTCOUNT ] ) { | |
| $dataLayer['postCountOnPage'] = (int) $wp_query->post_count; | |
| $dataLayer['postCountTotal'] = (int) $wp_query->found_posts; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTID ] && is_singular() === true ) { | |
| $dataLayer['postID'] = (int) get_the_ID(); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_POSTFORMAT ] && is_singular() === true ) { | |
| $dataLayer['postFormat'] = get_post_format() ?: 'standard'; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_BLACKLIST_ENABLE ] > 0 ) { | |
| $_gtmrestrictlistitems = array(); | |
| // because of security reasons, we loop through each stored entity in the options and validate them | |
| // to make sure nobody has entered some 'funny' item manually | |
| $valid_entity_ids = array_merge( | |
| array_keys( $gtm4wp_entity_ids[ 'tags' ] ), | |
| array_keys( $gtm4wp_entity_ids[ 'triggers' ] ), | |
| array_keys( $gtm4wp_entity_ids[ 'variables' ] ) | |
| ); | |
| foreach( $gtm4wp_options[ GTM4WP_OPTION_BLACKLIST_STATUS ] as $listed_entity ) { | |
| if ( in_array( $listed_entity, $valid_entity_ids ) ) { | |
| $_gtmrestrictlistitems[] = $listed_entity; | |
| } | |
| } | |
| $_gtmwhitelist = array(); | |
| $_gtmblacklist = array(); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_BLACKLIST_ENABLE ] == 1 ) { | |
| $_gtmblacklist = array_merge( $_gtmblacklist, $_gtmrestrictlistitems ); | |
| } else { | |
| $_gtmwhitelist = array_merge( $_gtmwhitelist, $_gtmrestrictlistitems ); | |
| } | |
| $dataLayer['gtm.whitelist'] = $_gtmwhitelist; | |
| $dataLayer['gtm.blacklist'] = $_gtmblacklist; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_MISCGEOCF ] && isset( $_SERVER['HTTP_CF_IPCOUNTRY'] ) ) { | |
| $dataLayer['geoCloudflareCountryCode'] = $_SERVER['HTTP_CF_IPCOUNTRY']; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_WEATHER ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_MISCGEO ] ) { | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_WEATHER ] ) { | |
| $dataLayer['weatherCategory'] = __( '(no weather data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['weatherDescription'] = __( '(no weather data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['weatherTemp'] = 0; | |
| $dataLayer['weatherPressure'] = 0; | |
| $dataLayer['weatherWindSpeed'] = 0; | |
| $dataLayer['weatherWindDeg'] = 0; | |
| $dataLayer['weatherDataStatus'] = 'Initialized with empty data'; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_MISCGEO ] ) { | |
| $dataLayer['geoCountryCode'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoCountryName'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoRegionCode'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoRegionName'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoCity'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoZipcode'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoLatitude'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| $dataLayer['geoLongitude'] = __( '(no geo data available)', 'duracelltomi-google-tag-manager' ); | |
| } | |
| $client_ip = gtm4wp_get_user_ip(); | |
| if ( '' !== $client_ip ) { | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_WEATHER ] ) { | |
| $weatherdata = get_transient( 'gtm4wp-weatherdata-' . esc_attr( $client_ip ) ); | |
| if ( false !== $weatherdata ) { | |
| $dataLayer['weatherCategory'] = $weatherdata->weather[0]->main; | |
| $dataLayer['weatherDescription'] = $weatherdata->weather[0]->description; | |
| $dataLayer['weatherTemp'] = $weatherdata->main->temp; | |
| $dataLayer['weatherPressure'] = $weatherdata->main->pressure; | |
| $dataLayer['weatherWindSpeed'] = $weatherdata->wind->speed; | |
| $dataLayer['weatherWindDeg'] = ( isset($weatherdata->wind->deg) ? $weatherdata->wind->deg : '' ); | |
| $dataLayer['weatherFullWeatherData'] = $weatherdata; | |
| $dataLayer['weatherDataStatus'] = 'Read from cache'; | |
| } else { | |
| $dataLayer['weatherDataStatus'] = 'No weather data in cache (' . esc_attr( $client_ip ) . ')'; | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_MISCGEO ] ) { | |
| $geodata = get_transient( 'gtm4wp-geodata-' . esc_attr( $client_ip ) ); | |
| if ( false !== $geodata ) { | |
| $dataLayer['geoFullGeoData'] = $geodata; | |
| if ( isset( $geodata->latitude ) ) { | |
| $dataLayer['geoCountryCode'] = $geodata->country_code; | |
| $dataLayer['geoCountryName'] = $geodata->country_name; | |
| $dataLayer['geoRegionCode'] = $geodata->region_code; | |
| $dataLayer['geoRegionName'] = $geodata->region_name; | |
| $dataLayer['geoCity'] = $geodata->city; | |
| $dataLayer['geoZipcode'] = $geodata->zip; | |
| $dataLayer['geoLatitude'] = $geodata->latitude; | |
| $dataLayer['geoLongitude'] = $geodata->longitude; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return $dataLayer; | |
| } | |
| function gtm4wp_wp_loaded() { | |
| global $gtm4wp_options; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_WEATHER ] || $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_MISCGEO ] ) { | |
| $client_ip = gtm4wp_get_user_ip(); | |
| $geodata = get_transient( 'gtm4wp-geodata-' . esc_attr( $client_ip ) ); | |
| if ( false === $geodata ) { | |
| $gtm4wp_geodata = @wp_remote_get( sprintf( 'http://api.ipstack.com/%s?access_key=%s&format=1', urlencode( $client_ip ), $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_MISCGEOAPI ] ) ); | |
| if ( is_array( $gtm4wp_geodata ) && ( 200 == $gtm4wp_geodata['response']['code'] ) ) { | |
| $gtm4wp_geodata = @json_decode( $gtm4wp_geodata['body'] ); | |
| if ( is_object( $gtm4wp_geodata ) ) { | |
| set_transient( 'gtm4wp-geodata-' . esc_attr( $client_ip ), $gtm4wp_geodata, 60 * 60 ); | |
| $weatherdata = get_transient( 'gtm4wp-weatherdata-' . esc_attr( $client_ip ) ); | |
| if ( false === $weatherdata && isset( $gtm4wp_geodata->latitude ) ) { | |
| $weatherdata = wp_remote_get( 'http://api.openweathermap.org/data/2.5/weather?appid=' . $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_WEATHEROWMAPI ] . '&lat=' . $gtm4wp_geodata->latitude . '&lon=' . $gtm4wp_geodata->longitude . '&units=' . ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_WEATHERUNITS ] == 0 ? 'metric' : 'imperial' ) ); | |
| if ( is_array( $weatherdata ) && ( 200 == $weatherdata['response']['code'] ) ) { | |
| $weatherdata = @json_decode( $weatherdata['body'] ); | |
| if ( is_object( $weatherdata ) ) { | |
| set_transient( 'gtm4wp-weatherdata-' . esc_attr( $client_ip ), $weatherdata, 60 * 60 ); | |
| setcookie( 'gtm4wp_last_weatherstatus', 'Weather data loaded.', 0, "/", "", false, true ); | |
| } else { | |
| setcookie( 'gtm4wp_last_weatherstatus', 'Openweathermap.org did not return processable data: ' . var_export( $weatherdata, true ), 0, "/", "", false, true ); | |
| } | |
| } else { | |
| if ( is_wp_error( $weatherdata ) ) { | |
| setcookie( 'gtm4wp_last_weatherstatus', 'Openweathermap.org request error: ' . $weatherdata->get_error_message(), 0, "/", "", false, true ); | |
| } else { | |
| setcookie( 'gtm4wp_last_weatherstatus', 'Openweathermap.org returned status code: ' . $weatherdata['response']['code'], 0, "/", "", false, true ); | |
| } | |
| } | |
| } | |
| } else { | |
| setcookie( 'gtm4wp_last_weatherstatus', 'ipstack.com did not return lat-lng data: ' . var_export( $gtm4wp_geodata, true ), 0, "/", "", false, true ); | |
| } | |
| } else { | |
| if ( is_wp_error( $gtm4wp_geodata ) ) { | |
| setcookie( 'gtm4wp_last_weatherstatus', 'ipstack.com request error: ' . $gtm4wp_geodata->get_error_message(), 0, "/", "", false, true ); | |
| } else { | |
| setcookie( 'gtm4wp_last_weatherstatus', 'ipstack.com returned status code: ' . $gtm4wp_geodata['response']['code'], 0, "/", "", false, true ); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function gtm4wp_get_container_placement_string() { | |
| global $gtm4wp_options; | |
| switch($gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ]) { | |
| case GTM4WP_PLACEMENT_FOOTER: return "footer"; | |
| case GTM4WP_PLACEMENT_BODYOPEN: return "manual"; | |
| case GTM4WP_PLACEMENT_BODYOPEN_AUTO: return "automatic"; | |
| case GTM4WP_PLACEMENT_OFF: return "off"; | |
| default: return "unknown (" . $gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ] . ")"; | |
| } | |
| } | |
| function gtm4wp_get_the_gtm_tag() { | |
| global $gtm4wp_options, $gtm4wp_datalayer_name, $gtm4wp_container_code_written; | |
| $has_html5_support = current_theme_supports( 'html5' ); | |
| $add_cookiebot_ignore = $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_COOKIEBOT ]; | |
| $_gtm_tag = ' | |
| <!-- GTM Container placement set to ' . gtm4wp_get_container_placement_string() . ' --> | |
| <!-- Google Tag Manager (noscript) -->'; | |
| if ( GTM4WP_PLACEMENT_OFF == $gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ] ) { | |
| $gtm4wp_container_code_written = true; | |
| $_gtm_tag .= ' | |
| <script' . ( $has_html5_support ? '' : ' type="text/javascript"' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . '> | |
| const console_cmd = console.warn || console.log; | |
| console_cmd && console_cmd("[GTM4WP] Google Tag Manager container code placement set to OFF !!!"); | |
| console_cmd && console_cmd("[GTM4WP] Data layer codes are active but GTM container must be loaded using custom coding !!!"); | |
| </script>'; | |
| } | |
| if ( ( $gtm4wp_options[ GTM4WP_OPTION_GTM_CODE ] != '' ) && ( ! $gtm4wp_container_code_written ) ) { | |
| $_gtm_codes = explode( ',', str_replace( array( ';', ' ' ), array( ',', '' ), $gtm4wp_options[ GTM4WP_OPTION_GTM_CODE ] ) ); | |
| if ( ( '' != $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_AUTH ] ) && ( '' != $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_PREVIEW ] ) ) { | |
| $_gtm_env = '>m_auth=' . $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_AUTH ] . '>m_preview=' . $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_PREVIEW ] . '>m_cookies_win=x'; | |
| } else { | |
| $_gtm_env = ''; | |
| } | |
| $_gtm_domain_name = 'www.googletagmanager.com'; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_GTMDOMAIN ] != '' ) { | |
| $_gtm_domain_name = $gtm4wp_options[ GTM4WP_OPTION_GTMDOMAIN ]; | |
| } | |
| foreach ( $_gtm_codes as $one_gtm_code ) { | |
| $_gtm_tag .= ' | |
| <noscript><iframe src="https://' . $_gtm_domain_name . '/ns.html?id=' . $one_gtm_code . $_gtm_env . '" | |
| height="0" width="0" style="display:none;visibility:hidden" aria-hidden="true"></iframe></noscript>'; | |
| } | |
| $_gtm_tag .= ' | |
| <!-- End Google Tag Manager (noscript) -->'; | |
| $_gtm_tag = apply_filters( GTM4WP_WPFILTER_GETTHEGTMTAG, $_gtm_tag ); | |
| $gtm4wp_container_code_written = true; | |
| } | |
| return $_gtm_tag; | |
| } | |
| function gtm4wp_the_gtm_tag() { | |
| echo gtm4wp_get_the_gtm_tag(); | |
| } | |
| function gtm4wp_enqueue_scripts() { | |
| global $gtm4wp_options, $gtp4wp_plugin_url; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_WPCF7 ] ) { | |
| $in_footer = apply_filters( 'gtm4wp_' . GTM4WP_OPTION_INTEGRATE_WPCF7, true ); | |
| wp_enqueue_script( 'gtm4wp-contact-form-7-tracker', $gtp4wp_plugin_url . 'js/gtm4wp-contact-form-7-tracker.js', array(), GTM4WP_VERSION, $in_footer ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_EVENTS_FORMMOVE ] ) { | |
| $in_footer = apply_filters( 'gtm4wp_' . GTM4WP_OPTION_EVENTS_FORMMOVE, true ); | |
| wp_enqueue_script( 'gtm4wp-form-move-tracker', $gtp4wp_plugin_url . 'js/gtm4wp-form-move-tracker.js', array(), GTM4WP_VERSION, $in_footer ); | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_EVENTS_YOUTUBE ] ) { | |
| require_once dirname( __FILE__ ) . '/../integration/youtube.php'; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_EVENTS_VIMEO ] ) { | |
| require_once dirname( __FILE__ ) . '/../integration/vimeo.php'; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_EVENTS_SOUNDCLOUD ] ) { | |
| require_once dirname( __FILE__ ) . '/../integration/soundcloud.php'; | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_ENABLED ] ) { | |
| $in_footer = apply_filters( 'gtm4wp_' . GTM4WP_OPTION_SCROLLER_ENABLED, false ); | |
| wp_enqueue_script( 'gtm4wp-scroll-tracking', $gtp4wp_plugin_url . 'js/analytics-talk-content-tracking.js', array( 'jquery' ), GTM4WP_VERSION, $in_footer ); | |
| } | |
| } | |
| function gtm4wp_wp_footer() { | |
| global $gtm4wp_options, $gtm4wp_datalayer_name; | |
| if ( GTM4WP_PLACEMENT_FOOTER == $gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ] ) { | |
| gtm4wp_the_gtm_tag(); | |
| } | |
| $has_html5_support = current_theme_supports( 'html5' ); | |
| $add_cookiebot_ignore = $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_COOKIEBOT ]; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_EVENTS_NEWUSERREG ] ) { | |
| $user_logged_in = array_key_exists( "gtm4wp_user_logged_in", $_COOKIE ) ? | |
| filter_var( $_COOKIE[ "gtm4wp_user_logged_in" ], FILTER_VALIDATE_INT ) | |
| : 0; | |
| if ( $user_logged_in ) { | |
| echo " | |
| <script" . ( $has_html5_support ? '' : ' type="text/javascript"' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . "> | |
| if ( window." . $gtm4wp_datalayer_name . " ) { | |
| window." . $gtm4wp_datalayer_name . ".push({ | |
| 'event': 'gtm4wp.userLoggedIn' | |
| }); | |
| } | |
| </script>"; | |
| unset( $_COOKIE[ "gtm4wp_user_logged_in" ] ); | |
| } | |
| } | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_EVENTS_USERLOGIN ] ) { | |
| $user_registered = array_key_exists( "gtm4wp_user_registered", $_COOKIE ) ? | |
| filter_var( $_COOKIE[ "gtm4wp_user_registered" ], FILTER_VALIDATE_INT ) | |
| : 0; | |
| if ( $user_registered ) { | |
| echo " | |
| <script" . ( $has_html5_support ? '' : ' type="text/javascript"' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . "> | |
| if ( window." . $gtm4wp_datalayer_name . " ) { | |
| window." . $gtm4wp_datalayer_name . ".push({ | |
| 'event': 'gtm4wp.userRegistered' | |
| }); | |
| } | |
| </script>"; | |
| unset( $_COOKIE[ "gtm4wp_user_registered" ] ); | |
| } | |
| } | |
| } | |
| function gtm4wp_wp_body_open() { | |
| global $gtm4wp_options; | |
| if ( ( GTM4WP_PLACEMENT_BODYOPEN == $gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ] ) || ( GTM4WP_PLACEMENT_BODYOPEN_AUTO == $gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ] ) ) { | |
| gtm4wp_the_gtm_tag(); | |
| } | |
| } | |
| function gtm4wp_filter_visitor_keys( $dataLayer ) { | |
| foreach ( $dataLayer as $dl_key => $dl_value ) { | |
| if ( strpos( $dl_key, 'visitor' ) !== false ) { | |
| unset( $dataLayer[ $dl_key ] ); | |
| } | |
| } | |
| return $dataLayer; | |
| } | |
| /** | |
| * GTM4WP global JS variables WordPress filter | |
| * | |
| * @author Vincent Koc <https://github.com/koconder/> | |
| * @link https://github.com/duracelltomi/gtm4wp/issues/34 | |
| * @return mixed returns the | |
| */ | |
| function gtm4wp_add_global_vars( $vars, $return = false ) { | |
| if ( ! $return ) { | |
| if ( function_exists( $vars ) ) { | |
| $vars = $vars(); | |
| } | |
| $GLOBALS['gtm4wp_datalayer_globalvars'] = $GLOBALS['gtm4wp_datalayer_globalvars'] . ' ' . $vars; | |
| } | |
| return $GLOBALS['gtm4wp_datalayer_globalvars']; | |
| } | |
| function gtm4wp_wp_header_top( $echo = true ) { | |
| global $gtm4wp_options, $gtm4wp_datalayer_name; | |
| $has_html5_support = current_theme_supports( 'html5' ); | |
| $add_cookiebot_ignore = $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_COOKIEBOT ]; | |
| $_gtm_top_content = ' | |
| <!-- Google Tag Manager for WordPress by gtm4wp.com --> | |
| <script data-cfasync="false" data-pagespeed-no-defer' . ( $has_html5_support ? ' type="text/javascript"' : '' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . '> | |
| var gtm4wp_datalayer_name = "' . $gtm4wp_datalayer_name . '"; | |
| var ' . $gtm4wp_datalayer_name . ' = ' . $gtm4wp_datalayer_name . ' || [];'; | |
| // Load in the global variables from gtm4wp_add_global_vars / GTM4WP_WPFILTER_ADDGLOBALVARS filter | |
| $_gtm_top_content .= apply_filters( GTM4WP_WPFILTER_ADDGLOBALVARS, '' ); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_ENABLED ] ) { | |
| $_gtm_top_content .= ' | |
| var gtm4wp_scrollerscript_debugmode = ' . ( $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_DEBUGMODE ] ? 'true' : 'false' ) . '; | |
| var gtm4wp_scrollerscript_callbacktime = ' . (int) $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_CALLBACKTIME ] . '; | |
| var gtm4wp_scrollerscript_readerlocation = ' . (int) $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_DISTANCE ] . '; | |
| var gtm4wp_scrollerscript_contentelementid = "' . $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_CONTENTID ] . '"; | |
| var gtm4wp_scrollerscript_scannertime = ' . (int) $gtm4wp_options[ GTM4WP_OPTION_SCROLLER_READERTIME ] . ';'; | |
| } | |
| $_gtm_top_content .= ' | |
| </script> | |
| <!-- End Google Tag Manager for WordPress by gtm4wp.com -->'; | |
| if ( ! gtm4wp_amp_running() ) { | |
| if ( $echo ) { | |
| echo $_gtm_top_content; | |
| } else { | |
| return $_gtm_top_content; | |
| } | |
| } | |
| } | |
| function gtm4wp_wp_header_begin( $echo = true ) { | |
| global $gtm4wp_datalayer_name, $gtm4wp_datalayer_json, $gtm4wp_options, $woocommerce; | |
| $has_html5_support = current_theme_supports( 'html5' ); | |
| $add_cookiebot_ignore = $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_COOKIEBOT ]; | |
| $_gtm_header_content = ' | |
| <!-- Google Tag Manager for WordPress by gtm4wp.com --> | |
| <!-- GTM Container placement set to ' . gtm4wp_get_container_placement_string() . ' --> | |
| <script data-cfasync="false" data-pagespeed-no-defer' . ( $has_html5_support ? ' type="text/javascript"' : '' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . '> | |
| const console_cmd = console.warn || console.log;'; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_GTM_CODE ] != '' ) { | |
| $gtm4wp_datalayer_data = array(); | |
| $gtm4wp_datalayer_data = (array) apply_filters( GTM4WP_WPFILTER_COMPILE_DATALAYER, $gtm4wp_datalayer_data ); | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_INCLUDE_REMARKETING ] ) { | |
| // add Google Ads remarketing tags as suggested here: | |
| // https://support.google.com/tagmanager/answer/3002580?hl=en | |
| add_filter( GTM4WP_WPFILTER_COMPILE_REMARKTING, 'gtm4wp_filter_visitor_keys' ); | |
| $gtm4wp_remarketing_tags = (array) apply_filters( GTM4WP_WPFILTER_COMPILE_REMARKTING, $gtm4wp_datalayer_data ); | |
| $_gtm_header_content .= "\nvar google_tag_params = "; | |
| $_gtm_header_content .= json_encode( $gtm4wp_remarketing_tags ); | |
| $_gtm_header_content .= ';'; | |
| $gtm4wp_datalayer_data['google_tag_params'] = '-~-window.google_tag_params-~-'; | |
| } | |
| if ( version_compare( PHP_VERSION, '5.4.0' ) >= 0 ) { | |
| $gtm4wp_datalayer_json = json_encode( $gtm4wp_datalayer_data, JSON_UNESCAPED_UNICODE ); | |
| } else { | |
| $gtm4wp_datalayer_json = json_encode( $gtm4wp_datalayer_data ); | |
| } | |
| // Clean up and then push datalayer to AMP | |
| $gtm4wp_datalayer_json = str_replace( | |
| array( '"-~-', '-~-"' ), | |
| array( '', '' ), | |
| str_replace( '', '-', $gtm4wp_datalayer_json ) | |
| ); | |
| $_gtm_header_content .= ' | |
| var dataLayer_content = ' . $gtm4wp_datalayer_json . ';'; | |
| // fire WooCommerce order double tracking protection only if WooCommerce is active and user is on the order received page | |
| if ( isset( $gtm4wp_options ) && ( $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_WCTRACKCLASSICEC ] || $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_WCTRACKENHANCEDEC ] ) && isset( $woocommerce ) && is_order_received_page() ) { | |
| $_gtm_header_content .= ' | |
| // if dataLayer contains ecommerce purchase data, check whether it has been already tracked | |
| if ( dataLayer_content.transactionId || ( dataLayer_content.ecommerce && dataLayer_content.ecommerce.purchase ) ) { | |
| // read order id already tracked from cookies | |
| var gtm4wp_orderid_tracked = ""; | |
| if ( !window.localStorage ) { | |
| var gtm4wp_cookie = "; " + document.cookie; | |
| var gtm4wp_cookie_parts = gtm4wp_cookie.split( "; gtm4wp_orderid_tracked=" ); | |
| if ( gtm4wp_cookie_parts.length == 2 ) { | |
| gtm4wp_orderid_tracked = gtm4wp_cookie_parts.pop().split(";").shift(); | |
| } | |
| } else { | |
| gtm4wp_orderid_tracked = window.localStorage.getItem( "gtm4wp_orderid_tracked" ); | |
| } | |
| // check enhanced ecommerce | |
| if ( dataLayer_content.ecommerce && dataLayer_content.ecommerce.purchase ) { | |
| if ( gtm4wp_orderid_tracked && ( dataLayer_content.ecommerce.purchase.actionField.id == gtm4wp_orderid_tracked ) ) { | |
| delete dataLayer_content.ecommerce.purchase; | |
| } else { | |
| gtm4wp_orderid_tracked = dataLayer_content.ecommerce.purchase.actionField.id; | |
| } | |
| } | |
| // check app+web ecommerce | |
| if ( dataLayer_content.ecommerce && dataLayer_content.ecommerce.items ) { | |
| if ( gtm4wp_orderid_tracked && ( dataLayer_content.ecommerce.transaction_id == gtm4wp_orderid_tracked ) ) { | |
| delete dataLayer_content.ecommerce.affiliation; | |
| delete dataLayer_content.ecommerce.value; | |
| delete dataLayer_content.ecommerce.currency; | |
| delete dataLayer_content.ecommerce.tax; | |
| delete dataLayer_content.ecommerce.shipping; | |
| delete dataLayer_content.ecommerce.transaction_id; | |
| delete dataLayer_content.ecommerce.items; | |
| } else { | |
| gtm4wp_orderid_tracked = dataLayer_content.ecommerce.purchase.actionField.id; | |
| } | |
| } | |
| // check standard ecommerce | |
| if ( dataLayer_content.transactionId ) { | |
| if ( gtm4wp_orderid_tracked && ( dataLayer_content.transactionId == gtm4wp_orderid_tracked ) ) { | |
| delete dataLayer_content.transactionId; | |
| delete dataLayer_content.transactionDate; | |
| delete dataLayer_content.transactionType; | |
| delete dataLayer_content.transactionAffiliation; | |
| delete dataLayer_content.transactionTotal; | |
| delete dataLayer_content.transactionShipping; | |
| delete dataLayer_content.transactionTax; | |
| delete dataLayer_content.transactionPaymentType; | |
| delete dataLayer_content.transactionCurrency; | |
| delete dataLayer_content.transactionShippingMethod; | |
| delete dataLayer_content.transactionPromoCode; | |
| delete dataLayer_content.transactionProducts; | |
| } else { | |
| gtm4wp_orderid_tracked = dataLayer_content.transactionId; | |
| } | |
| } | |
| if ( gtm4wp_orderid_tracked ) { | |
| if ( !window.localStorage ) { | |
| var gtm4wp_orderid_cookie_expire = new Date(); | |
| gtm4wp_orderid_cookie_expire.setTime( gtm4wp_orderid_cookie_expire.getTime() + (365*24*60*60*1000) ); | |
| var gtm4wp_orderid_cookie_expires_part = "expires=" + gtm4wp_orderid_cookie_expire.toUTCString(); | |
| document.cookie = "gtm4wp_orderid_tracked=" + gtm4wp_orderid_tracked + ";" + gtm4wp_orderid_cookie_expires_part + ";path=/"; | |
| } else { | |
| window.localStorage.setItem( "gtm4wp_orderid_tracked", gtm4wp_orderid_tracked ); | |
| } | |
| } | |
| }'; | |
| } | |
| $_gtm_header_content .= ' | |
| ' . $gtm4wp_datalayer_name . '.push( dataLayer_content );'; | |
| } | |
| $_gtm_header_content .= ' | |
| </script>'; | |
| $_gtm_header_content .= apply_filters( GTM4WP_WPFILTER_AFTER_DATALAYER, '' ); | |
| $output_container_code = true; | |
| if ( GTM4WP_PLACEMENT_OFF == $gtm4wp_options[ GTM4WP_OPTION_GTM_PLACEMENT ] ) { | |
| $output_container_code = false; | |
| $_gtm_header_content .= ' | |
| <script' . ( $has_html5_support ? '' : ' type="text/javascript"' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . '> | |
| console_cmd && console_cmd("[GTM4WP] Google Tag Manager container code placement set to OFF !!!"); | |
| console_cmd && console_cmd("[GTM4WP] Data layer codes are active but GTM container must be loaded using custom coding !!!"); | |
| </script>'; | |
| } | |
| $disabled_roles = explode( ',', $gtm4wp_options[ GTM4WP_OPTION_NOGTMFORLOGGEDIN ] ); | |
| if (count($disabled_roles) > 0 ) { | |
| $current_user = wp_get_current_user(); | |
| foreach( $current_user->roles as $user_role ) { | |
| if ( in_array( $user_role, $disabled_roles ) ) { | |
| $output_container_code = false; | |
| $_gtm_header_content .= ' | |
| <script' . ( $has_html5_support ? '' : ' type="text/javascript"' ) . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . '> | |
| console_cmd && console_cmd("[GTM4WP] Google Tag Manager container code was disabled for this user role: ' . $user_role . ' !!!"); | |
| console_cmd && console_cmd("[GTM4WP] Logout or login with a user having a different user role!"); | |
| console_cmd && console_cmd("[GTM4WP] Data layer codes are active but GTM container code is omitted !!!"); | |
| </script>'; | |
| break; | |
| } | |
| } | |
| } | |
| if ( ( $gtm4wp_options[ GTM4WP_OPTION_GTM_CODE ] != '' ) && $output_container_code ) { | |
| $_gtm_codes = explode( ',', str_replace( array( ';', ' ' ), array( ',', '' ), $gtm4wp_options[ GTM4WP_OPTION_GTM_CODE ] ) ); | |
| $add_cookiebot_ignore = $gtm4wp_options[ GTM4WP_OPTION_INTEGRATE_COOKIEBOT ]; | |
| $_gtm_tag = ''; | |
| foreach ( $_gtm_codes as $one_gtm_code ) { | |
| if ( ( '' != $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_AUTH ] ) && ( '' != $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_PREVIEW ] ) ) { | |
| $_gtm_env = "+'>m_auth=" . $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_AUTH ] . '>m_preview=' . $gtm4wp_options[ GTM4WP_OPTION_ENV_GTM_PREVIEW ] . ">m_cookies_win=x'"; | |
| } else { | |
| $_gtm_env = ''; | |
| } | |
| $_gtm_domain_name = 'www.googletagmanager.com'; | |
| if ( $gtm4wp_options[ GTM4WP_OPTION_GTMDOMAIN ] != '' ) { | |
| $_gtm_domain_name = $gtm4wp_options[ GTM4WP_OPTION_GTMDOMAIN ]; | |
| } | |
| $_gtm_tag .= ' | |
| <script data-cfasync="false"' . ( $add_cookiebot_ignore ? ' data-cookieconsent="ignore"' : '' ) . '> | |
| (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\': | |
| new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0], | |
| j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src= | |
| \'//' . $_gtm_domain_name . '/gtm.\'' . '+\'js?id=\'+i+dl' . $_gtm_env . ';f.parentNode.insertBefore(j,f); | |
| })(window,document,\'script\',\'' . $gtm4wp_datalayer_name . '\',\'' . $one_gtm_code . '\'); | |
| </script>'; | |
| } | |
| $_gtm_tag .= ' | |
| <!-- End Google Tag Manager -->'; | |
| $_gtm_tag = apply_filters( GTM4WP_WPFILTER_GETTHEGTMTAG, $_gtm_tag ); | |
| $_gtm_header_content .= $_gtm_tag; | |
| } | |
| $_gtm_header_content .= ' | |
| <!-- End Google Tag Manager for WordPress by gtm4wp.com -->'; | |
| if ( ! gtm4wp_amp_running() ) { | |
| if ( $echo ) { | |
| echo $_gtm_header_content; | |
| } else { | |
| return $_gtm_header_content; | |
| } | |
| } | |
| } | |
| function gtm4wp_wp_login() { | |
| setcookie( | |
| "gtm4wp_user_logged_in", | |
| "1", | |
| 0, | |
| "/", | |
| "", | |
| (false !== strstr( get_option( 'home' ), 'https:' )) && is_ssl(), | |
| true | |
| ); | |
| } | |
| function gtm4wp_user_register() { | |
| setcookie( | |
| "gtm4wp_user_registered", | |
| "1", | |
| 0, | |
| "/", | |
| "", | |
| (false !== strstr( get_option( 'home' ), 'https:' )) && is_ssl(), | |
| true | |
| ); | |
| } | |
| function gtm4wp_rocket_excluded_inline_js_content( $pattern ) { | |
| $pattern[] = 'dataLayer'; | |
| $pattern[] = 'gtm4wp'; | |
| return $pattern; | |
| } | |
| function gtm4wp_wp_init() { | |
| if ( array_key_exists( "gtm4wp_user_logged_in", $_COOKIE ) ) { | |
| setcookie( | |
| "gtm4wp_user_logged_in", | |
| "", | |
| -10000, | |
| "/", | |
| "", | |
| (false !== strstr( get_option( 'home' ), 'https:' )) && is_ssl(), | |
| true | |
| ); | |
| } | |
| if ( array_key_exists( "gtm4wp_user_registered", $_COOKIE ) ) { | |
| setcookie( | |
| "gtm4wp_user_registered", | |
| "", | |
| -10000, | |
| "/", | |
| "", | |
| (false !== strstr( get_option( 'home' ), 'https:' )) && is_ssl(), | |
| true | |
| ); | |
| } | |
| } | |
| add_action( 'wp_enqueue_scripts', 'gtm4wp_enqueue_scripts' ); | |
| $gtm4wp_header_begin_prior = 10; | |
| if ( isset( $GLOBALS['gtm4wp_options'] ) && $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_LOADEARLY ] ) { | |
| $gtm4wp_header_begin_prior = 2; | |
| } | |
| add_action( 'wp_head', 'gtm4wp_wp_header_begin', $gtm4wp_header_begin_prior, 0 ); | |
| add_action( 'wp_head', 'gtm4wp_wp_header_top', 1, 0 ); | |
| add_action( 'wp_footer', 'gtm4wp_wp_footer' ); | |
| add_action( 'wp_loaded', 'gtm4wp_wp_loaded' ); | |
| add_filter( GTM4WP_WPFILTER_COMPILE_DATALAYER, 'gtm4wp_add_basic_datalayer_data' ); | |
| add_action( 'init', 'gtm4wp_wp_init' ); | |
| // to be able to easily migrate from other Google Tag Manager plugins | |
| add_action( 'body_open', 'gtm4wp_wp_body_open' ); | |
| // compatibility with existing themes that natively support code injection after opening body tag | |
| add_action( 'genesis_before', 'gtm4wp_wp_body_open' ); // Genisis theme | |
| add_action( 'generate_before_header', 'gtm4wp_wp_body_open', 0 ); // GeneratePress theme | |
| add_action( 'elementor/page_templates/canvas/before_content', 'gtm4wp_wp_body_open' ); // Elementor | |
| add_action( 'ct_before_builder', 'gtm4wp_wp_body_open', 0 ); // Oxygen Builder | |
| add_action( 'fl_before_builder', 'gtm4wp_wp_body_open', 0 ); // Beaver Builder Theme | |
| // standard WP theme support for body open tags | |
| add_action( 'wp_body_open', 'gtm4wp_wp_body_open' ); | |
| add_filter( 'rocket_excluded_inline_js_content', 'gtm4wp_rocket_excluded_inline_js_content' ); // WP Rocket | |
| if ( | |
| isset( $GLOBALS['gtm4wp_options'] ) | |
| && ( | |
| $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_INTEGRATE_WCTRACKCLASSICEC ] | |
| || $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_INTEGRATE_WCTRACKENHANCEDEC ] | |
| ) | |
| && isset( $GLOBALS['woocommerce'] ) | |
| && version_compare( WC()->version, '3.2', '>=' ) // only activate WooCommerce integration for minimum supported WooCommerce version | |
| ) { | |
| require_once dirname( __FILE__ ) . '/../integration/woocommerce.php'; | |
| } | |
| if ( isset( $GLOBALS['gtm4wp_options'] ) && ( $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_INTEGRATE_GOOGLEOPTIMIZEIDS ] != '' ) ) { | |
| require_once dirname( __FILE__ ) . '/../integration/google-optimize.php'; | |
| } | |
| if ( isset( $GLOBALS['gtm4wp_options'] ) && ( $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_EVENTS_USERLOGIN ] ) ) { | |
| add_action( 'wp_login', 'gtm4wp_wp_login' ); | |
| } | |
| if ( isset( $GLOBALS['gtm4wp_options'] ) && ( $GLOBALS['gtm4wp_options'][ GTM4WP_OPTION_EVENTS_NEWUSERREG ] ) ) { | |
| add_action( 'user_register', 'gtm4wp_user_register' ); | |
| } |