PluginProbe
Visual Website Optimizer / 3.3
Visual Website Optimizer v3.3
trunk 1.0 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.10 All 37 releases
visual-web-optimizer / visual-website-optimizer.php

visual-website-optimizer.php in Visual Website Optimizer 3.3, at visual-website-optimizer.php

238 lines 11.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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: VWO
7 Version: 3.3
8 visual-website-optimizer.php
9 Author URI: https://vwo.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 /**
22 * Generate Common Code
23 * @param type $vwo_id integer
24 * @return type string
25 */
26 function get_vwo_clhf_script_common_code($vwo_clicks = 10) {
27 ob_start();
28 ?>
29 <!-- Start VWO Common Smartcode -->
30 <script type='text/javascript'>
31 var _vwo_clicks = <?php echo $vwo_clicks ?>;
32 </script>
33 <!-- End VWO Common Smartcode -->
34 <?php
35 $script_code = ob_get_clean();
36 return $script_code;
37 }
38
39 /**
40 * Generate Synchronous Code
41 * @param type $vwo_id integer
42 * @return type string
43 */
44 function get_vwo_clhf_script_sync_code($vwo_id = 0) {
45 ob_start();
46 ?>
47 <!-- Start VWO Smartcode -->
48 <script src="https://dev.visualwebsiteoptimizer.com/lib/<?php echo $vwo_id ?>.js"></script>
49 <!-- End VWO Smartcode -->
50 <?php
51 $sync_script = ob_get_clean();
52 return $sync_script;
53 }
54
55 /**
56 * Generate Asynchronous Code
57 * @param type $vwo_id integer
58 * @param type $settings_tolerance integer
59 * @param type $library_tolerance integer
60 * @param type $use_existing_jquery string
61 * @return type string
62 */
63 function get_vwo_clhf_script_async_code($vwo_id = 0, $settings_tolerance, $library_tolerance, $use_existing_jquery) {
64 ob_start();
65 ?>
66 <!-- Start VWO Async Smartcode -->
67 <script type='text/javascript'>
68 window._vwo_code = window._vwo_code || (function(){
69 var account_id= <?php echo $vwo_id ?>,
70 settings_tolerance= <?php echo $settings_tolerance ?>,
71 library_tolerance= <?php echo $library_tolerance ?>,
72 use_existing_jquery= <?php echo ($use_existing_jquery) ? 'true' : 'false'; ?>,
73 is_spa=1,
74 hide_element='body',
75 /* DO NOT EDIT BELOW THIS LINE */
76 f=false,d=document,code={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(){
77 window.settings_timer=setTimeout('_vwo_code.finish()',settings_tolerance);var a=d.createElement('style'),b=hide_element?hide_element+'{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);this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+(+is_spa)+'&r='+Math.random());return settings_timer; }};window._vwo_settings_timer = code.init(); return code; }());
78 </script>
79 <!-- End VWO Async Smartcode -->
80 <?php
81 $async_script = ob_get_clean();
82 return $async_script;
83 }
84
85 //------------------------------------------------------------------------//
86 //---Hook-----------------------------------------------------------------//
87 //------------------------------------------------------------------------//
88 add_action( 'wp_head', 'vwo_clhf_headercode',1 );
89 add_action( 'admin_menu', 'vwo_clhf_plugin_menu' );
90 add_action( 'admin_init', 'vwo_clhf_register_mysettings' );
91 add_action( 'admin_notices','vwo_clhf_warn_nosettings');
92
93
94 //------------------------------------------------------------------------//
95 //---Functions------------------------------------------------------------//
96 //------------------------------------------------------------------------//
97 // options page link
98 function vwo_clhf_plugin_menu() {
99 add_options_page('Visual Website Optimizer', 'VWO', 'create_users', 'clhf_vwo_options', 'vwo_clhf_plugin_options');
100 }
101
102 // whitelist settings
103 function vwo_clhf_register_mysettings(){
104 register_setting('clhf_vwo_options','vwo_id','intval');
105 register_setting('clhf_vwo_options','code_type');
106 register_setting('clhf_vwo_options','vwo_clicks');
107 register_setting('clhf_vwo_options','settings_tolerance','intval');
108 register_setting('clhf_vwo_options','library_tolerance','intval');
109 register_setting('clhf_vwo_options','use_existing_jquery','boolval');
110 }
111
112 //------------------------------------------------------------------------//
113 //---Output Functions-----------------------------------------------------//
114 //------------------------------------------------------------------------//
115 function vwo_clhf_headercode() {
116 // runs in the header
117 $vwo_id = get_option('vwo_id');
118 $code_type = get_option('code_type');
119
120 if ($vwo_id) {
121 if(empty(get_option('vwo_clicks'))){
122 update_option('vwo_clicks', '10' );
123 }
124 $vwo_clicks = get_option('vwo_clicks');
125 //common script code
126 echo get_vwo_clhf_script_common_code($vwo_clicks);
127 if ($code_type == 'SYNC') {
128 //sync script code
129 echo get_vwo_clhf_script_sync_code($vwo_id); // only output if options were saved
130 } else {
131
132 $settings_tolerance = get_option('settings_tolerance');
133 if (!is_numeric($settings_tolerance))
134 $settings_tolerance = 2000;
135
136 $library_tolerance = get_option('library_tolerance');
137 if (!is_numeric($library_tolerance))
138 $library_tolerance = 2500;
139
140 $use_existing_jquery = get_option('use_existing_jquery');
141 $use_existing_jquery = ($use_existing_jquery == 1) ? true : false;
142
143 //async script code
144 echo get_vwo_clhf_script_async_code($vwo_id, $settings_tolerance, $library_tolerance, $use_existing_jquery);
145 }
146 }
147 }
148
149 //------------------------------------------------------------------------//
150 //---Page Output Functions------------------------------------------------//
151 //------------------------------------------------------------------------//
152 // options page
153 function vwo_clhf_plugin_options() {
154 echo '<div class="wrap">';?>
155 <h2>VWO</h2>
156 <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>
157 <form method="post" action="options.php">
158 <?php settings_fields( 'clhf_vwo_options' ); ?>
159 <table class="form-table">
160 <tr valign="top">
161 <th scope="row">Your VWO Account ID</th>
162 <td><input type="text" name="vwo_id" value="<?php echo get_option('vwo_id'); ?>" /></td>
163 </tr>
164 <tr valign="top">
165 <th scope="row">No. of Heatmap Clicks</th>
166 <td><input type="number" name="vwo_clicks" value="<?php echo get_option('vwo_clicks') ? get_option('vwo_clicks'):10 ; ?>" min="3"/></td>
167 </tr>
168 <tr valign="top">
169 <th scope="row">Code (default: Asynchronous)</th>
170 <td>
171 <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&nbsp;&nbsp;&nbsp;
172 <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
173 &nbsp;<a href="https://vwo.com/blog/asynchronous-code" target="_blank">[Help]</a>
174 </td>
175 </tr>
176 <tr valign="top" id='asyncOnly1' <?php if(get_option('code_type')=='SYNC') echo "style='display:none;'" ?>>
177 <th scope="row">Settings Timeout</th>
178 <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>
179 </tr>
180 <tr valign="top" id='asyncOnly2' <?php if(get_option('code_type')=='SYNC') echo "style='display:none;'" ?>>
181 <th scope="row">Library Timeout</th>
182 <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>
183 </tr>
184 <tr valign="top" id='asyncOnly3' <?php if(get_option('code_type')=='SYNC') echo "style='display:none;'" ?>>
185 <th scope="row">Use Existing jQuery</th>
186 <td style="vertical-align: middle;"><input type="checkbox" name="use_existing_jquery" value="1" <?php if(get_option('use_existing_jquery') == true) echo "checked"; ?>/>Yes</td>
187 </tr>
188 </table>
189
190 <script type="text/javascript">
191 function selectCodeType() {
192 var code_type = 'ASYNC';
193 if(document.getElementById('code_type_sync').checked)
194 code_type = 'SYNC';
195
196 if(code_type == 'ASYNC') {
197 document.getElementById('asyncOnly1').style.display = 'table-row';
198 document.getElementById('asyncOnly2').style.display = 'table-row';
199 document.getElementById('asyncOnly3').style.display = 'table-row';
200 }
201 else {
202 document.getElementById('asyncOnly1').style.display = 'none';
203 document.getElementById('asyncOnly2').style.display = 'none';
204 document.getElementById('asyncOnly3').style.display = 'none';
205 }
206 }
207 </script>
208 <p class="submit"><input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" /></p>
209 <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>
210 <?php
211 echo '</div>';
212 }
213
214 function vwo_clhf_warn_nosettings(){
215 if (!is_admin())
216 return;
217
218 $clhf_option = get_option("vwo_id");
219 if (!$clhf_option || $clhf_option < 1){
220 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>";
221 }
222 }
223
224
225 add_filter('plugin_action_links_'.plugin_basename(__FILE__), 'vwo_clhf_add_plugin_page_settings_link');
226 /**
227 * Function to add Settings Links on Plugin page
228 * @param array $links
229 * @return string
230 */
231 function vwo_clhf_add_plugin_page_settings_link( $links ) {
232 $links[] = '<a href="' .
233 admin_url( 'options-general.php?page=clhf_vwo_options' ) .
234 '">' . __('Settings') . '</a>';
235 return $links;
236 }
237
238 ?>