| 1 |
<?php |
| 2 |
/* |
| 3 |
Plugin Name: VWO |
| 4 |
Plugin URI: https://vwo.com/ |
| 5 |
Description: VWO is the all-in-one platform that helps you conduct visitor research, build an optimization roadmap, and run continuous experimentation. Simply enable the plugin and start running tests on your Wordpress website without doing any other code changes. Visit <a href="https://vwo.com/">VWO</a> for more details. |
| 6 |
Author: Wingify |
| 7 |
Version: 3.2 |
| 8 |
visual-website-optimizer.php |
| 9 |
Author URI: https://wingify.com |
| 10 |
|
| 11 |
This relies on the actions being present in the themes header.php and footer.php |
| 12 |
* header.php code before the closing </head> tag |
| 13 |
* wp_head(); |
| 14 |
* |
| 15 |
*/ |
| 16 |
|
| 17 |
//------------------------------------------------------------------------// |
| 18 |
//---Config---------------------------------------------------------------// |
| 19 |
//------------------------------------------------------------------------// |
| 20 |
|
| 21 |
$clhf_header_script_sync = ' |
| 22 |
<!-- Start VWO Code --> |
| 23 |
<script type=\'text/javascript\'> |
| 24 |
var _vis_opt_account_id = VWO_ID; |
| 25 |
var _vis_opt_protocol = ((\'https:\' == document.location.protocol) ? \'https://\' : \'http://\'); |
| 26 |
document.write(\'<s\' + \'cript src="\' + _vis_opt_protocol + \'dev.visualwebsiteoptimizer.com/deploy/js_visitor_settings.php?v=1&a=\'+_vis_opt_account_id+\'&url=\'+encodeURIComponent(document.URL)+\'&random=\'+Math.random()+\'" type="text/javascript">\' + \'<\/s\' + \'cript>\'); |
| 27 |
</script> |
| 28 |
<script type=\'text/javascript\'> |
| 29 |
if(typeof(_vis_opt_settings_loaded) == "boolean") { document.write(\'<s\' + \'cript src="\' + _vis_opt_protocol + \'d5phz18u4wuww.cloudfront.net/vis_opt.js" type="text/javascript">\' + \'<\/s\' + \'cript>\'); } |
| 30 |
</script> |
| 31 |
<script type=\'text/javascript\'> |
| 32 |
if(typeof(_vis_opt_settings_loaded) == "boolean" && typeof(_vis_opt_top_initialize) == "function"){ _vis_opt_top_initialize(); |
| 33 |
vwo_$(document).ready(function() { _vis_opt_bottom_initialize(); }); } |
| 34 |
</script> |
| 35 |
<!-- End VWO Code --> |
| 36 |
'; |
| 37 |
|
| 38 |
$clhf_header_script_async = ' |
| 39 |
<!-- Start VWO Asynchronous Code --> |
| 40 |
<script type=\'text/javascript\'> |
| 41 |
var _vwo_code=(function(){ |
| 42 |
var account_id=VWO_ID, |
| 43 |
settings_tolerance=SETTINGS_TOLERANCE, |
| 44 |
library_tolerance=LIBRARY_TOLERANCE, |
| 45 |
use_existing_jquery=false, |
| 46 |
f=false,d=document;return{use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById(\'_vis_opt_path_hides\');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement(\'script\');b.src=a;b.type=\'text/javascript\';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName(\'head\')[0].appendChild(b);},init:function(){settings_timer=setTimeout(\'_vwo_code.finish()\',settings_tolerance);this.load(\'//dev.visualwebsiteoptimizer.com/j.php?a=\'+account_id+\'&u=\'+encodeURIComponent(d.URL)+\'&r=\'+Math.random());var a=d.createElement(\'style\'),b=\'body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}\',h=d.getElementsByTagName(\'head\')[0];a.setAttribute(\'id\',\'_vis_opt_path_hides\');a.setAttribute(\'type\',\'text/css\');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);return settings_timer;}};}());_vwo_settings_timer=_vwo_code.init(); |
| 47 |
</script> |
| 48 |
<!-- End VWO Asynchronous Code --> |
| 49 |
'; |
| 50 |
|
| 51 |
|
| 52 |
//------------------------------------------------------------------------// |
| 53 |
//---Hook-----------------------------------------------------------------// |
| 54 |
//------------------------------------------------------------------------// |
| 55 |
add_action( 'wp_head', 'vwo_clhf_headercode',1 ); |
| 56 |
add_action( 'admin_menu', 'vwo_clhf_plugin_menu' ); |
| 57 |
add_action( 'admin_init', 'vwo_clhf_register_mysettings' ); |
| 58 |
add_action( 'admin_notices','vwo_clhf_warn_nosettings'); |
| 59 |
|
| 60 |
|
| 61 |
//------------------------------------------------------------------------// |
| 62 |
//---Functions------------------------------------------------------------// |
| 63 |
//------------------------------------------------------------------------// |
| 64 |
// options page link |
| 65 |
function vwo_clhf_plugin_menu() { |
| 66 |
add_options_page('Visual Website Optimizer', 'VWO', 'create_users', 'clhf_vwo_options', 'vwo_clhf_plugin_options'); |
| 67 |
} |
| 68 |
|
| 69 |
// whitelist settings |
| 70 |
function vwo_clhf_register_mysettings(){ |
| 71 |
register_setting('clhf_vwo_options','vwo_id','intval'); |
| 72 |
register_setting('clhf_vwo_options','code_type'); |
| 73 |
register_setting('clhf_vwo_options','settings_tolerance','intval'); |
| 74 |
register_setting('clhf_vwo_options','library_tolerance','intval'); |
| 75 |
} |
| 76 |
|
| 77 |
//------------------------------------------------------------------------// |
| 78 |
//---Output Functions-----------------------------------------------------// |
| 79 |
//------------------------------------------------------------------------// |
| 80 |
function vwo_clhf_headercode(){ |
| 81 |
// runs in the header |
| 82 |
global $clhf_header_script_sync, $clhf_header_script_async; |
| 83 |
$vwo_id = get_option('vwo_id'); |
| 84 |
$code_type = get_option('code_type'); |
| 85 |
if($vwo_id){ |
| 86 |
if($code_type == 'SYNC') |
| 87 |
echo str_replace('VWO_ID', $vwo_id, $clhf_header_script_sync); // only output if options were saved |
| 88 |
else { |
| 89 |
$settings_tolerance = get_option('settings_tolerance'); |
| 90 |
if(!is_numeric($settings_tolerance)) $settings_tolerance = 2000; |
| 91 |
|
| 92 |
$library_tolerance = get_option('library_tolerance'); |
| 93 |
if(!is_numeric($library_tolerance)) $library_tolerance = 2500; |
| 94 |
|
| 95 |
$clhf_header_script_async = str_replace('VWO_ID', $vwo_id, $clhf_header_script_async); |
| 96 |
$clhf_header_script_async = str_replace('SETTINGS_TOLERANCE', $settings_tolerance, $clhf_header_script_async); |
| 97 |
echo str_replace('LIBRARY_TOLERANCE', $library_tolerance, $clhf_header_script_async); |
| 98 |
} |
| 99 |
} |
| 100 |
} |
| 101 |
//------------------------------------------------------------------------// |
| 102 |
//---Page Output Functions------------------------------------------------// |
| 103 |
//------------------------------------------------------------------------// |
| 104 |
// options page |
| 105 |
function vwo_clhf_plugin_options() { |
| 106 |
echo '<div class="wrap">';?> |
| 107 |
<h2>VWO</h2> |
| 108 |
<p>You need to have a <a href="https://vwo.com/">VWO</a> account in order to use this plugin. This plugin inserts the neccessary code into your Wordpress site automatically without you having to touch anything. In order to use the plugin, you need to enter your VWO Account ID:</p> |
| 109 |
<form method="post" action="options.php"> |
| 110 |
<?php settings_fields( 'clhf_vwo_options' ); ?> |
| 111 |
<table class="form-table"> |
| 112 |
<tr valign="top"> |
| 113 |
<th scope="row">Your VWO Account ID</th> |
| 114 |
<td><input type="text" name="vwo_id" value="<?php echo get_option('vwo_id'); ?>" /></td> |
| 115 |
</tr> |
| 116 |
<tr valign="top"> |
| 117 |
<th scope="row">Code (default: Asynchronous)</th> |
| 118 |
<td> |
| 119 |
<input style="vertical-align: text-top;" type="radio" onclick="selectCodeType();" name="code_type" id="code_type_async" value="ASYNC" <?php if(get_option('code_type')!='SYNC') echo "checked"; ?> /> Asynchronous |
| 120 |
<input style="vertical-align: text-top;" type="radio" onclick="selectCodeType();" name="code_type" id="code_type_sync" value="SYNC" <?php if(get_option('code_type')=='SYNC') echo "checked"; ?> /> Synchronous |
| 121 |
<a href="https://vwo.com/blog/asynchronous-code" target="_blank">[Help]</a> |
| 122 |
</td> |
| 123 |
</tr> |
| 124 |
<tr valign="top" id='asyncOnly1' <?php if(get_option('code_type')=='SYNC') echo "style='display:none;'" ?>> |
| 125 |
<th scope="row">Settings Timeout</th> |
| 126 |
<td style="vertical-align: middle;"><input type="text" name="settings_tolerance" value="<?php echo get_option('settings_tolerance')?get_option('settings_tolerance'):2000; ?>" />ms (default: 2000)</td> |
| 127 |
</tr> |
| 128 |
<tr valign="top" id='asyncOnly2' <?php if(get_option('code_type')=='SYNC') echo "style='display:none;'" ?>> |
| 129 |
<th scope="row">Library Timeout</th> |
| 130 |
<td style="vertical-align: middle;"><input type="text" name="library_tolerance" value="<?php echo get_option('library_tolerance')?get_option('library_tolerance'):2500; ?>" />ms (default: 2500)</td> |
| 131 |
</tr> |
| 132 |
</table> |
| 133 |
|
| 134 |
<script type="text/javascript"> |
| 135 |
function selectCodeType() { |
| 136 |
var code_type = 'ASYNC'; |
| 137 |
if(document.getElementById('code_type_sync').checked) |
| 138 |
code_type = 'SYNC'; |
| 139 |
|
| 140 |
if(code_type == 'ASYNC') { |
| 141 |
document.getElementById('asyncOnly1').style.display = 'table-row'; |
| 142 |
document.getElementById('asyncOnly2').style.display = 'table-row'; |
| 143 |
} |
| 144 |
else { |
| 145 |
document.getElementById('asyncOnly1').style.display = 'none'; |
| 146 |
document.getElementById('asyncOnly2').style.display = 'none'; |
| 147 |
} |
| 148 |
} |
| 149 |
</script> |
| 150 |
<p class="submit"><input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" /></p> |
| 151 |
<p>Your Account ID (a number) can be found in <i>Settings</i> area (top-right) after you <a href="https://app.vwo.com">login</a> into your VWO account.</p> |
| 152 |
<?php |
| 153 |
echo '</div>'; |
| 154 |
} |
| 155 |
|
| 156 |
function vwo_clhf_warn_nosettings(){ |
| 157 |
if (!is_admin()) |
| 158 |
return; |
| 159 |
|
| 160 |
$clhf_option = get_option("vwo_id"); |
| 161 |
if (!$clhf_option || $clhf_option < 1){ |
| 162 |
echo "<div id='vwo-warning' class='updated fade'><p><strong>VWO is almost ready.</strong> You must <a href=\"options-general.php?page=clhf_vwo_options\">enter your Account ID</a> for it to work.</p></div>"; |
| 163 |
} |
| 164 |
} |
| 165 |
|
| 166 |
|
| 167 |
add_filter('plugin_action_links_'.plugin_basename(__FILE__), 'vwo_clhf_add_plugin_page_settings_link'); |
| 168 |
/** |
| 169 |
* Function to add Settings Links on Plugin page |
| 170 |
* @param array $links |
| 171 |
* @return string |
| 172 |
*/ |
| 173 |
function vwo_clhf_add_plugin_page_settings_link( $links ) { |
| 174 |
$links[] = '<a href="' . |
| 175 |
admin_url( 'options-general.php?page=clhf_vwo_options' ) . |
| 176 |
'">' . __('Settings') . '</a>'; |
| 177 |
return $links; |
| 178 |
} |
| 179 |
|
| 180 |
?> |