roles)){ $isDisabled = true; } } if($d['code'] == 'guest' && count($current_user->roles) == 0){ if(isset($v)){ if(SDIDTM_checked($v)){ $isDisabled = true; } } } } if($isDisabled){ // notify the logged in user in the admin bar that DTM is disabled if($wp_admin_bar){ $wp_admin_bar->add_menu( array( 'id'=>'adobe-dtm', 'title'=>'Adobe DTM Disabled' ) ); } } // disable for guests if(!$isDisabled && SDIDTM_checked($guest) && count($current_user->roles) == 0){ $isDisabled = true; } return $isDisabled; } function SDI_dtm_exists(){ global $config; if($SDIDTM_options[SDIDTM_OPTION_DTM_EXISTS]){ return true; } else { return false; } } function SDIDTM_get_name($name){ global $SDIDTM_defaultoptions, $SDIDTM_options; $value = $SDIDTM_options[$name]; if(!$value || $value == ''){ $value = $SDIDTM_defaultoptions[$name]; } return $value; } function SDIDTM_include( $value ){ if($value === 1 || $value == '1' || $value === true || $value == 'true'){ return true; } else { return false; } } function SDIDTM_value( $field ){ global $dtmSaved; if(isset($field['name'])){ return $dtmSaved['name-'.$field['name']]; } } function SDIDTM_add_datalayer($dataLayer) { global $current_user, $wp_query, $dtmSaved; $config = SDIDTM_get_options('config', true); $data = SDIDTM_get_options('dataLayer', true); $s = $dtmSaved; $postType = isset($s['include-posttype']) ? SDIDTM_include($s['include-posttype']) : ''; $postLbl = isset($data['posttype']) ? SDIDTM_value($data['posttype']) : ''; $subPostType = isset($s['include-postsubtype']) ? SDIDTM_include($s['include-postsubtype']) : ''; $subPostLbl = isset($data['postsubtype']) ? SDIDTM_value($data['postsubtype']) : ''; if(SDIDTM_disable()){ return array(); } $date = $modifiedDate = array(); if(isset($s['include-loggedin'])){ if (SDIDTM_include($s['include-loggedin'])) { if (is_user_logged_in()) { $dataLayer[SDIDTM_value($data['loggedin'])] = "logged-in"; } else { $dataLayer[SDIDTM_value($data['loggedin'])] = "logged-out"; } } } if(isset($s['include-userrole'])){ if (SDIDTM_include($s['include-userrole'])) { get_currentuserinfo(); $dataLayer[SDIDTM_value($data['userrole'])] = ($current_user->roles[0] == NULL ? "guest" : $current_user->roles[0]); } } if(isset($s['include-posttitle'])){ if (SDIDTM_include($s['include-posttitle'])) { $dataLayer[SDIDTM_value($data['posttitle'])] = strip_tags(wp_title("|", false, "right")); } } if(isset($s['include-postexcerpt'])){ if (SDIDTM_include($s['include-postexcerpt'])) { $dataLayer[SDIDTM_value($data['postexcerpt'])] = strip_tags(get_the_excerpt()); } } if(isset($s['include-sitetitle'])){ if (SDIDTM_include($s['include-sitetitle'])) { $dataLayer[SDIDTM_value($data['sitetitle'])] = get_bloginfo('name', 'display'); } } if(isset($s['include-siteurl'])){ if (SDIDTM_include($s['include-siteurl'])) { $dataLayer[SDIDTM_value($data['siteurl'])] = get_bloginfo('url', 'display'); } } if(isset($s['include-sitedescription'])){ if (SDIDTM_include($s['include-sitedescription'])) { $dataLayer[SDIDTM_value($data['sitedescription'])] = get_bloginfo('description', 'display'); } } if(isset($s['include-siteplatform'])){ if (SDIDTM_include($s['include-siteplatform'])) { $dataLayer[SDIDTM_value($data['siteplatform'])] = "WordPress"; } } if (is_singular()) { if(get_the_ID() && SDIDTM_include($s['include-pageid'])){ $dataLayer[SDIDTM_value($data['pageid'])] = get_the_ID(); } if(isset($s['include-custom'])){ if(SDIDTM_include($s['include-custom'])){ $meta = get_post_custom(); $newmeta = array(); foreach($meta as $mn=>$mv){ if(strpos($mn, "_edit_")===false && strpos($mn, "_wp_")===false){ $newmeta[$mn] = $mv; } } $dataLayer[SDIDTM_value($data['custom'])] = $newmeta; } } if ($postType) { $dataLayer[$postLbl] = get_post_type(); } if($subPostType) { $dataLayer[$subPostLbl] = "single-" . get_post_type(); } if(isset($s['include-comments'])){ if(SDIDTM_include($s['include-comments'])){ if(comments_open()){ $dataLayer[SDIDTM_value($data['comments'])] = get_comments_number(); } } } if(isset($s['include-categories'])){ if (SDIDTM_include($s['include-categories'])) { $_post_cats = get_the_category(); if ($_post_cats) { $dataLayer[SDIDTM_value($data['categories'])] = array(); foreach ($_post_cats as $_one_cat) { $dataLayer[SDIDTM_value($data['categories'])][] = $_one_cat->slug; } } } } if(isset($s['include-tags'])){ if (SDIDTM_include($s['include-tags'])) { $_post_tags = get_the_tags(); if ($_post_tags) { $dataLayer[SDIDTM_value($data['tags'])] = array(); foreach ($_post_tags as $tag) { $dataLayer[SDIDTM_value($data['tags'])][] = $tag->slug; } } } } if(isset($s['include-author'])){ if (SDIDTM_include($s['include-author'])) { $postuser = get_userdata($GLOBALS["post"]->post_author); if (false !== $postuser) { $dataLayer[SDIDTM_value($data['author'])] = $postuser->display_name; } } } $date["date"] = get_the_date(); $date["year"] = get_the_date("Y"); $date["month"] = get_the_date("m"); $date["day"] = get_the_date("d"); $modifiedDate["date"] = get_the_modified_date(); $modifiedDate["year"] = get_the_date("Y"); $modifiedDate["month"] = get_the_date("m"); $modifiedDate["day"] = get_the_date("d"); } if (is_archive() || is_post_type_archive()) { if ($postType) { $dataLayer[$postLbl] = get_post_type(); if (is_category()) { $dataLayer[$subPostLbl] = "category-" . get_post_type(); } else if (is_tag()) { $dataLayer[$subPostLbl] = "tag-" . get_post_type(); } else if (is_tax()) { $dataLayer[$subPostLbl] = "tax-" . get_post_type(); } else if (is_author()) { $dataLayer[$subPostLbl] = "author-" . get_post_type(); } else if (is_year()) { $dataLayer[$subPostLbl] = "year-" . get_post_type(); $date["year"] = get_the_date("Y"); $modifiedDate["year"] = get_the_modified_date("Y"); } else if (is_month()) { $dataLayer[$subPostLbl] = "month-" . get_post_type(); $date["year"] = get_the_date("Y"); $date["month"] = get_the_date("m"); $modifiedDate["year"] = get_the_modified_date("Y"); $modifiedDate["month"] = get_the_modified_date("m"); } else if (is_day()) { $dataLayer[$subPostLbl] = "day-" . get_post_type(); $date["date"] = get_the_date(); $date["year"] = get_the_date("Y"); $date["month"] = get_the_date("m"); $date["day"] = get_the_date("d"); $modifiedDate["date"] = get_the_modified_date('Y-m-d\TH:i:sO'); $modifiedDate["year"] = get_the_modified_date("Y"); $modifiedDate["month"] = get_the_modified_date("m"); $modifiedDate["day"] = get_the_modified_date("d"); } else if (is_time()) { $dataLayer[$subPostLbl] = "time-" . get_post_type(); } else if (is_date()) { $dataLayer[$subPostLbl] = "date-" . get_post_type(); $date["date"] = get_the_date(); $date["year"] = get_the_date("Y"); $date["month"] = get_the_date("m"); $date["day"] = get_the_date("d"); $modifiedDate["date"] = get_the_modified_date('Y-m-d\TH:i:sO'); $modifiedDate["year"] = get_the_modified_date("Y"); $modifiedDate["month"] = get_the_modified_date("m"); $modifiedDate["day"] = get_the_modified_date("d"); } } if ((is_tax() || is_category()) && $SDIDTM_options[SDIDTM_include($s['include-categories'])]) { $_post_cats = get_the_category(); $dataLayer[SDIDTM_value($data['categories'])] = array(); foreach ($_post_cats as $_one_cat) { $dataLayer[SDIDTM_value($data['categories'])][] = $_one_cat->slug; } } if (SDIDTM_include($s['include-author']) && (is_author())) { $dataLayer[SDIDTM_value($data['author'])] = get_the_author(); } } if (is_search()) { if(SDIDTM_include($s['include-searchterm'])){ $dataLayer[SDIDTM_value($data['searchterm'])] = get_search_query(); } if(SDIDTM_include($s['include-searchorigin'])){ $dataLayer[SDIDTM_value($data['searchorigin'])] = $_SERVER["HTTP_REFERER"]; } if(SDIDTM_include($s['include-searchresults'])){ $dataLayer[SDIDTM_value($data['searchresults'])] = $wp_query->post_count; } } if (is_front_page() && $postType) { $dataLayer[$postLbl] = "homepage"; } if (!is_front_page() && is_home() && $postType) { $dataLayer[$postLbl] = "blog-home"; } if(isset($s['include-postcount'])){ if (SDIDTM_include($s['include-postcount'])) { $dataLayer[SDIDTM_value($data['postcount'])] = (int)$wp_query->post_count; // $dataLayer["postCountTotal"] = (int)$wp_query->found_posts; } } if(isset($s['include-postdate'])){ if (SDIDTM_include($s['include-postdate']) && count($date)>0) { $dataLayer[SDIDTM_value($data['postdate'])] = $date; } } if(isset($s['include-modifieddate'])){ if (SDIDTM_include($s['include-modifieddate']) && count($modifiedDate)>0) { $dataLayer[SDIDTM_value($data['modifieddate'])] = $modifiedDate; } } return $dataLayer; } function SDIDTM_wp_header() { global $dtm; $config = SDIDTM_get_options('config', true); $dataLayer = array(); $dataLayer = (array)apply_filters("sdidtm_build_datalayer", $dataLayer); $dataLayer = SDIDTM_parseDataLayerConfig($dataLayer); $_dtm_header_content = ''; if ($config['dtm-code']['value'] != "" && !SDIDTM_disable()) { $_dtm_header_content.= ' '; if(!SDIDTM_checked($config['include-dtm-exists'])){ $_dtm_header_content.= ' '; } } echo $_dtm_header_content."\n"; } function SDIDTM_wp_footer() { global $dtm; $config = SDIDTM_get_options('config', true); $_dtm_tag = ''; if ($config['dtm-code']['value'] != "" && !SDIDTM_checked($config['include-dtm-exists']) && !SDIDTM_disable()) { $_dtm_tag.= ' '; } echo $_dtm_tag; } /* * Convert the dot notation into a nested array */ function SDIDTM_parseDataLayerConfig($config) { if (is_array($config) && sizeof($config) > 0) { $dataLayer = array(); foreach($config as $key => $value){ if ( isset($dataLayer[$key]) ) { if ( is_array($dataLayer[$key]) && sizeof($dataLayer[$key]) === sizeof($dataLayer[$key], COUNT_RECURSIVE)) { $dataLayer[$key][] = $value; }else{ $dataLayer[$key] = $value; } } else { $dataLayer = array_merge_recursive($dataLayer, SDIDTM_createElement($key, $value)); } } }else{ $dataLayer = $config; } return $dataLayer; } // recursive function to construct an object from dot-notation function SDIDTM_createElement($key, $value) { $element = array(); $key = (string)$key; // if the key is a property if (strpos($key, '.') !== false) { // extract the first part with the name of the object $list = explode('.', $key); // the rest of the key $sub_key = substr_replace($key, "", 0, strlen($list[0])+1); // create the object if it doesnt exist if (!$element[$list[0]]) $element[$list[0]] = array(); // if the key is not empty, create it in the object if ($sub_key !== '') { $element[$list[0]] = SDIDTM_createElement($sub_key, $value); } else { //var_export('SDIDTM_createElement :: empty property in key "'. $key .'"'); } } // just normal key else { $element[$key] = $value; } return $element; } add_action("wp_head", "SDIDTM_wp_header", 1); add_action("wp_footer", "SDIDTM_wp_footer", 100000); add_filter("sdidtm_build_datalayer", "SDIDTM_add_datalayer");