Changeset 1705902
- Timestamp:
- 07/31/2017 07:53:07 PM (9 years ago)
- Location:
- simple-content-experiments/trunk
- Files:
-
- 3 edited
-
readme.txt (modified) (2 diffs)
-
simple-content-experiments.js (modified) (8 diffs)
-
simple-content-experiments.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
simple-content-experiments/trunk/readme.txt
r1533949 r1705902 4 4 Tags: testing, google, content experiments, a/b testing 5 5 Requires at least: 3.2.1 6 Tested up to: 4. 5.37 Stable tag: 3.0. 06 Tested up to: 4.8 7 Stable tag: 3.0.1 8 8 License: GPLv2 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 152 152 153 153 == Changelog == 154 = 3.0.1 155 Update for WordPress 4.8 156 154 157 = 3.0.0 155 158 + Restructure code -
simple-content-experiments/trunk/simple-content-experiments.js
r1533949 r1705902 6 6 event_flavor: "unknown", // no default 7 7 ga_name: '', // function name of Universal Analytics functions 8 analytics_flavor: "unknown", 8 9 cx_loaded: "pending", // has the content experiments code loaded? 9 10 event: { … … 17 18 if (simple_content_experiements_debug){ console.log(str);} // uses global simple_content_experiements_debug 18 19 }, 20 21 /** 22 * Returns the currently running "flavor" of Google Analytics 23 * @returns {string} unknown | gtm | classic | universal 24 */ 19 25 get_analytics_event_flavor: function(){ 20 26 var retval = "unknown" … … 34 40 if ( "unknown" == retval){ 35 41 if ( "string" == typeof window["GoogleAnalyticsObject"]){ 36 content_experiment.ga_name = window["GoogleAnalyticsObject"];42 this.ga_name = window["GoogleAnalyticsObject"]; 37 43 retval = "universal"; 38 44 } 39 45 } 46 this.analytics_flavor = retval; 40 47 return retval; 41 48 }, 42 display_experiment: function(){ 43 if ("loaded" == content_experiment.cx_loaded.substr( 0, 6 )){ 44 //Execute the chosen view: 45 var selected_variation = content_experiment.selected; 46 content_experiment.event.label = content_experiment.id; 47 content_experiment.event.action = "select"; 48 content_experiment.event.value = selected_variation; 49 content_experiment.dbgmsg("chosenExperiment = " + content_experiment.id + "\nchosenVariation = " + selected_variation); 50 content_experiment.dbgmsg("number of variations: " + content_experiment.variant_count); 51 for ( i = 1; i <= content_experiment.variant_count; i++) { 49 /** 50 * Updates the DOM to display the selected variant and 51 * remove the other variations. 52 * @param {number} selected_variation - which variation to display 53 */ 54 display_experiment: function(selected_variation){ 55 this.dbgmsg("display_experiment()"); 56 this.event.label = this.id; 57 this.event.action = "select"; 58 this.event.value = selected_variation; 59 this.dbgmsg("chosenExperiment = " + this.id ); 60 this.dbgmsg("number of variations: " + this.variant_count); 61 this.dbgmsg("chosenVariation = " + selected_variation); 62 for ( i = 1; i <= this.variant_count; i++) { 52 63 if ( (i - 1) == selected_variation) { // 0 based 53 // content_experiment.dbgmsg("showing variant " + i + content_experiment.id + "__" + i);54 jQuery("#" + content_experiment.id + "__" + i).show();64 this.dbgmsg("showing variant " + i + ": " + this.id + "__" + i); 65 jQuery("#" + this.id + "__" + i).show(); 55 66 } else { 56 // content_experiment.dbgmsg("hiding variant " + i + content_experiment.id + "__" + i); 57 jQuery("#" + content_experiment.id + "__" + i).remove(); 58 } 59 } 60 61 } else { 62 // stuff didn\'t load: 63 // fail case is already in the record. Report "not loaded yet" case as an event: 64 if ( false !== content_experiment.cx_loaded ){ 65 content_experiment.label = content_experiment.cx_loaded ; 66 } 67 68 } 69 67 this.dbgmsg("hiding variant " + i + ": " + this.id + "__" + i); 68 jQuery("#" + this.id + "__" + i).remove(); 69 } 70 } 71 70 72 71 73 }, 72 74 analytics_event: function(){ 73 content_experiment.dbgmsg("analytics_event: analytics type: " + content_experiment.event_flavor); 75 this.dbgmsg("analytics_event()"); 76 this.dbgmsg("analytics type: " + this.event_flavor); 74 77 75 78 // sometimes the scripts load in the wrong order and Google Analytics won\'t get an event from chooseVariation() 76 79 // Send any event to analytics to solve this: 77 80 78 switch ( content_experiment.event_flavor){81 switch (this.event_flavor){ 79 82 case "classic": 80 83 _trackEvent( // category, action, opt_label, opt_value, opt_noninteraction 81 content_experiment.event.category,82 content_experiment.event.action,83 content_experiment.event.label,84 content_experiment.event.value,84 this.event.category, 85 this.event.action, 86 this.event.label, 87 this.event.value, 85 88 true 86 89 ); 87 content_experiment.dbgmsg("_trackEvent posted ");90 this.dbgmsg("_trackEvent posted "); 88 91 break; 89 92 … … 91 94 dataLayer.push({ 92 95 "event" : "SimpleXGAEvent", 93 "eventCategory" : content_experiment.event.category,94 "eventAction" : content_experiment.event.action,95 "eventLabel" : content_experiment.event.label,96 "eventValue" : content_experiment.event.value,96 "eventCategory" : this.event.category, 97 "eventAction" : this.event.action, 98 "eventLabel" : this.event.label, 99 "eventValue" : this.event.value, 97 100 "nonInteraction": true 98 101 }); 99 content_experiment.dbgmsg("dataLayer.push posted ");102 this.dbgmsg("dataLayer.push posted "); 100 103 break; 101 104 case "universal": 102 window[ content_experiment.ga_name]("send", "event",103 content_experiment.event.category,104 content_experiment.event.action,105 content_experiment.event.label,106 content_experiment.event.value,105 window[this.ga_name]("send", "event", 106 this.event.category, 107 this.event.action, 108 this.event.label, 109 this.event.value, 107 110 { nonInteraction: true } 108 111 ); 109 content_experiment.dbgmsg( content_experiment.ga_name + " event posted ");112 this.dbgmsg( this.ga_name + " event posted "); 110 113 break; 111 114 default: 112 content_experiment.dbgmsg("event_flavor: " + content_experiment.event_flavor);115 this.dbgmsg("event_flavor: " + this.event_flavor); 113 116 } 114 117 115 118 }, 116 119 run_experiment: function(){ 117 content_experiment.dbgmsg("run_experiment");120 this.dbgmsg("run_experiment"); 118 121 // create list of experiments (as marked up in DOM) and how many variations: 119 122 jQuery( ".contentexperimentvariant" ).each( … … 126 129 } 127 130 ); 128 // content_experiment.ex_list is object of experiment ID with counts129 var keys = Object.keys( content_experiment.ex_list);131 // this.ex_list is object of experiment ID with counts 132 var keys = Object.keys(this.ex_list); 130 133 if (keys.length > 0){ // no experiments 131 content_experiment.dbgmsg("detected " + keys.length + " experiment(s).");134 this.dbgmsg("detected " + keys.length + " experiment(s)."); 132 135 // pick an experiment to run on this page: 133 136 var i = Math.floor((Math.random() * keys.length)); // 0 based 134 content_experiment.id = keys[i];135 content_experiment.variant_count = content_experiment.ex_list[content_experiment.id];137 this.id = keys[i]; 138 this.variant_count = this.ex_list[this.id]; 136 139 jQuery.getScript( 137 140 "//www.google-analytics.com/cx/api.js?experiment=" + content_experiment.id, … … 147 150 jQuery("#" + content_experiment.id + "__" + i).find("a").addClass("xvariantclick"); 148 151 } 149 content_experiment.display_experiment(); 152 153 154 155 if ("loaded" == content_experiment.cx_loaded.substr( 0, 6 )){ 156 // Sanity check some values: 157 if ("unknown" == content_experiment.analytics_flavor){ 158 content_experiment.dbgmsg("No analytics"); 159 content_experiment.selected = 0; 160 } 161 if (content_experiment.selected > content_experiment.variant_count){ 162 content_experiment.selected = 0; 163 content_experiment.dbgmsg("selection out of range."); 164 } 165 } else { //loading error 166 // fail case is already in the record. Report "not loaded yet" case as an event: 167 if ( false !== content_experiment.cx_loaded ){ 168 content_experiment.dbgmsg("experiments didn't load."); 169 content_experiment.label = content_experiment.cx_loaded; 170 content_experiment.selected = 0; 171 } 172 } 173 174 //display the chosen view: 175 content_experiment.display_experiment(content_experiment.selected); 176 150 177 content_experiment.analytics_event(); // move this until after we're sure it's loaded? 151 178 } … … 157 184 }) 158 185 .fail(function( jqxhr, settings, exception ) { 186 187 159 188 console.log( "getScript: Triggered ajaxError handler." ); 160 189 content_experiment.action = "Fail"; … … 166 195 content_experiment.dbgmsg("no experiments detected."); 167 196 } 168 } 169 197 } 170 198 }; 171 199 -
simple-content-experiments/trunk/simple-content-experiments.php
r1533949 r1705902 2 2 /** 3 3 * @package content-experiments 4 * @version 3.0. 04 * @version 3.0.1 5 5 */ 6 6 /* … … 8 8 Description: Shortcodes to create Google Content Experiments elements in a page 9 9 Author: Lon Koenig (Firebrand LLC) 10 Version: 3.0. 010 Version: 3.0.1 11 11 Author URI: //firebrand.net/ 12 12 … … 44 44 private static $experiment_id = null; 45 45 private static $errmsg = ''; 46 public $debug_enable = ' false';46 public $debug_enable = 'true'; 47 47 48 48 public function __construct() {
Note: See TracChangeset
for help on using the changeset viewer.