DuracellTomi's Google Tag Manager for WordPress - Version 0.1

Version Description

  • First beta release

=

Download this release

Release Info

Developer duracelltomi
Plugin Icon 128x128 DuracellTomi's Google Tag Manager for WordPress
Version 0.1
Comparing to
See all releases

Version 0.1

admin/admin.php ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ define( 'GTM4WP_ADMINSLUG', 'gtm4wp-settings' );
3
+ define( 'GTM4WP_ADMIN_GROUP', 'gtm4wp-admin-group' );
4
+
5
+ define( 'GTM4WP_ADMIN_GROUP_GENERAL', 'gtm4wp-admin-group-general' );
6
+ define( 'GTM4WP_ADMIN_GROUP_GTMID', 'gtm4wp-admin-group-gtm-id' );
7
+ define( 'GTM4WP_ADMIN_GROUP_DATALAYER', 'gtm4wp-admin-group-datalayer-name' );
8
+ define( 'GTM4WP_ADMIN_GROUP_INFO', 'gtm4wp-admin-group-datalayer-info' );
9
+
10
+ define( 'GTM4WP_ADMIN_GROUP_INCLUDES', 'gtm4wp-admin-group-includes' );
11
+ define( 'GTM4WP_ADMIN_GROUP_EVENTS', 'gtm4wp-admin-group-events' );
12
+ define( 'GTM4WP_ADMIN_GROUP_INTEGRATION', 'gtm4wp-admin-group-integration' );
13
+ define( 'GTM4WP_ADMIN_GROUP_ADVANCED', 'gtm4wp-admin-group-advanced' );
14
+ define( 'GTM4WP_ADMIN_GROUP_CREDITS', 'gtm4wp-admin-group-credits' );
15
+
16
+ $GLOBALS["gtm4wp_includefieldtexts"] = array(
17
+ GTM4WP_OPTION_INCLUDE_REMARKETING => array(
18
+ "label" => __( "Remarketing variable", GTM4WP_TEXTDOMAIN ),
19
+ "description" => __( "Check this option to include a dataLayer variable where all dataLayer values are stored to be included in your AdWords remarketing tag as a custom variable field", GTM4WP_TEXTDOMAIN )
20
+ ),
21
+ GTM4WP_OPTION_INCLUDE_LOGGEDIN => array(
22
+ "label" => __( "Logged in status", GTM4WP_TEXTDOMAIN ),
23
+ "description" => __( "Check this option to include whether there is a logged in user on your website.", GTM4WP_TEXTDOMAIN )
24
+ ),
25
+ GTM4WP_OPTION_INCLUDE_USERROLE => array(
26
+ "label" => __( "Logged in user role", GTM4WP_TEXTDOMAIN ),
27
+ "description" => __( "Check this option to include the role of the logged in user.", GTM4WP_TEXTDOMAIN )
28
+ ),
29
+ GTM4WP_OPTION_INCLUDE_POSTTYPE => array(
30
+ "label" => __( "Posttype of current post/archive", GTM4WP_TEXTDOMAIN ),
31
+ "description" => __( "Check this option to include the type of the current post or archive page (post, page or any custom post type).", GTM4WP_TEXTDOMAIN )
32
+ ),
33
+ GTM4WP_OPTION_INCLUDE_CATEGORIES => array(
34
+ "label" => __( "Category list of current post/archive", GTM4WP_TEXTDOMAIN ),
35
+ "description" => __( "Check this option to include the category names of the current post or archive page", GTM4WP_TEXTDOMAIN )
36
+ ),
37
+ GTM4WP_OPTION_INCLUDE_TAGS => array(
38
+ "label" => __( "Tags of current post", GTM4WP_TEXTDOMAIN ),
39
+ "description" => __( "Check this option to include the tags of the current post.", GTM4WP_TEXTDOMAIN )
40
+ ),
41
+ GTM4WP_OPTION_INCLUDE_AUTHOR => array(
42
+ "label" => __( "Post author name", GTM4WP_TEXTDOMAIN ),
43
+ "description" => __( "Check this option to include the author's name of the current post or author page.", GTM4WP_TEXTDOMAIN )
44
+ ),
45
+ GTM4WP_OPTION_INCLUDE_POSTDATE => array(
46
+ "label" => __( "Post date", GTM4WP_TEXTDOMAIN ),
47
+ "description" => __( "Check this option to include the date of the current post. This will include 4 dataLayer variables: full date, post year, post month, post date.", GTM4WP_TEXTDOMAIN )
48
+ ),
49
+ GTM4WP_OPTION_INCLUDE_POSTTITLE => array(
50
+ "label" => __( "Post title", GTM4WP_TEXTDOMAIN ),
51
+ "description" => __( "Check this option to include the title of the current post.", GTM4WP_TEXTDOMAIN )
52
+ ),
53
+ GTM4WP_OPTION_INCLUDE_SEARCHDATA => array(
54
+ "label" => __( "Search data", GTM4WP_TEXTDOMAIN ),
55
+ "description" => __( "Check this option to include the search term, referring page URL and number of results on the search page.", GTM4WP_TEXTDOMAIN )
56
+ )
57
+ );
58
+
59
+ $GLOBALS["gtm4wp_eventfieldtexts"] = array(
60
+ GTM4WP_OPTION_EVENTS_OUTBOUND => array(
61
+ "label" => __( "Outbound link click events", GTM4WP_TEXTDOMAIN ),
62
+ "description" => __( "Check this option to include a Tag Manager event when a visitor clicks on a link directing the visitor out of your website.", GTM4WP_TEXTDOMAIN )
63
+ ),
64
+ GTM4WP_OPTION_EVENTS_DOWNLOADS => array(
65
+ "label" => __( "Download click events", GTM4WP_TEXTDOMAIN ),
66
+ "description" => __( "Check this option to include a Tag Manager event when a visitors clicks on a link that leads to a downloadable file on your website.", GTM4WP_TEXTDOMAIN )
67
+ ),
68
+ GTM4WP_OPTION_EVENTS_DWLEXT => array(
69
+ "label" => __( "Extensions to track", GTM4WP_TEXTDOMAIN ),
70
+ "description" => __( "Enter a comma separated list of extensions to track when 'Include download click events' option is set.", GTM4WP_TEXTDOMAIN )
71
+ ),
72
+ GTM4WP_OPTION_EVENTS_EMAILCLICKS => array(
73
+ "label" => __( "Email click events", GTM4WP_TEXTDOMAIN ),
74
+ "description" => __( "Check this option to include a Tag Manager event when a visitor clicks on an email link.", GTM4WP_TEXTDOMAIN )
75
+ ),
76
+ );
77
+
78
+ $GLOBALS["gtm4wp_integratefieldtexts"] = array(
79
+ GTM4WP_OPTION_INTEGRATE_WPCF7 => array(
80
+ "label" => __( "Contact Form 7", GTM4WP_TEXTDOMAIN ),
81
+ "description" => __( "Check this to include a dataLayer event after a successfull form submission.", GTM4WP_TEXTDOMAIN ),
82
+ "plugintocheck" => "contact-form-7/wp-contact-form-7.php"
83
+ ),
84
+ GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE => array(
85
+ "label" => __( "WooCommerce", GTM4WP_TEXTDOMAIN ),
86
+ "description" => __( "Enable this and you will get:<br /> - Add-to-cart events<br /> - E-commerce transaction data ready to be used with Google Analytics and Universal Analytics tags<br /> - Google AdWords dynamic remarketing tags", GTM4WP_TEXTDOMAIN ),
87
+ "plugintocheck" => "woocommerce/woocommerce.php"
88
+ )
89
+ );
90
+
91
+ function gtm4wp_admin_output_section( $args ) {
92
+ echo '<span class="tabinfo">';
93
+
94
+ switch( $args["id"] ) {
95
+ case GTM4WP_ADMIN_GROUP_GENERAL: {
96
+ _e( 'This plugin is intended to be used by IT guys and marketing staff. Please be sure you read the <a href="https://developers.google.com/tag-manager/" target="_blank">Google Tag Manager Help Center</a> before you start using this plugin.<br /><br /><strong>Important:</strong> This plugin is still <strong>beta</strong>. It has not been tested on many websites. There might be issues with some plugins or themes!', GTM4WP_TEXTDOMAIN );
97
+
98
+ break;
99
+ }
100
+
101
+ case GTM4WP_ADMIN_GROUP_INCLUDES: {
102
+ _e( "Here you can check what data is needed to be included in the dataLayer to be able to access them in Google Tag Manager", GTM4WP_TEXTDOMAIN );
103
+
104
+ break;
105
+ }
106
+
107
+ case GTM4WP_ADMIN_GROUP_EVENTS: {
108
+ _e( "Fire tags in Google Tag Manager on special events on your website", GTM4WP_TEXTDOMAIN );
109
+
110
+ break;
111
+ }
112
+
113
+ case GTM4WP_ADMIN_GROUP_INTEGRATION: {
114
+ _e( "Google Tag Manager for WordPress can integrate with several popular plugins. Please check the plugins you would like to integrate with:", GTM4WP_TEXTDOMAIN );
115
+
116
+ break;
117
+ }
118
+
119
+ case GTM4WP_ADMIN_GROUP_ADVANCED: {
120
+ _e( "You usually do not need to modify thoose settings. Please be carefull while hacking here.", GTM4WP_TEXTDOMAIN );
121
+
122
+ break;
123
+ }
124
+
125
+ case GTM4WP_ADMIN_GROUP_CREDITS: {
126
+ _e( "Some info about the author of this plugin", GTM4WP_TEXTDOMAIN );
127
+
128
+ break;
129
+ }
130
+ } // end switch
131
+
132
+ echo '</span>';
133
+ }
134
+
135
+ function gtm4wp_admin_output_field( $args ) {
136
+ global $gtm4wp_options;
137
+
138
+ switch( $args["label_for"] ) {
139
+ case GTM4WP_ADMIN_GROUP_GTMID: {
140
+ echo '<input type="text" id="' . GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_GTM_CODE . ']" name="' . GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_GTM_CODE . ']" value="' . $gtm4wp_options[GTM4WP_OPTION_GTM_CODE] . '" /><br />' . $args["description"];
141
+
142
+ break;
143
+ }
144
+
145
+ case GTM4WP_ADMIN_GROUP_DATALAYER: {
146
+ echo '<input type="text" id="' . GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_DATALAYER_NAME . ']" name="' . GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_DATALAYER_NAME . ']" value="' . $gtm4wp_options[GTM4WP_OPTION_DATALAYER_NAME] . '" /><br />' . $args["description"];
147
+
148
+ break;
149
+ }
150
+
151
+ case GTM4WP_ADMIN_GROUP_INFO: {
152
+ echo $args["description"];
153
+
154
+ break;
155
+ }
156
+
157
+ default: {
158
+ $optval = $gtm4wp_options[$args["optionfieldid"]];
159
+
160
+ switch(gettype($optval)) {
161
+ case "boolean": {
162
+ echo '<input type="checkbox" id="' . GTM4WP_OPTIONS . '[' . $args["optionfieldid"] . ']" name="' . GTM4WP_OPTIONS . '[' . $args["optionfieldid"] . ']" value="1" ' . checked( 1, $optval, false ) . ' /><br />' . $args["description"];
163
+
164
+ if ( isset( $args["plugintocheck"] ) ) {
165
+ if ( is_plugin_active( $args["plugintocheck"] ) ) {
166
+ echo "<br />" . __( 'This plugin is <strong class="gtm4wp-plugin-active">active</strong>, it is strongly recomment to enable this integration!', GTM4WP_TEXTDOMAIN );
167
+ } else {
168
+ echo "<br />" . __( 'This plugin is <strong class="gtm4wp-plugin-not-active">not active</strong>, enabling this integration could cause issues on frontend!', GTM4WP_TEXTDOMAIN );
169
+ }
170
+ }
171
+
172
+ break;
173
+ }
174
+
175
+ default : {
176
+ echo '<input type="text" id="' . GTM4WP_OPTIONS . '[' . $args["optionfieldid"] . ']" name="' . GTM4WP_OPTIONS . '[' . $args["optionfieldid"] . ']" value="' . esc_attr( $optval ) . '" size="80" /><br />' . $args["description"];
177
+ }
178
+ } // end switch gettype optval
179
+ }
180
+ } // end switch
181
+ }
182
+
183
+ function gtm4wp_sanitize_options($options) {
184
+ $output = gtm4wp_reload_options();
185
+
186
+ foreach($output as $optionname => $optionvalue) {
187
+ if ( isset( $options[$optionname] ) ) {
188
+ $newoptionvalue = $options[$optionname];
189
+ } else {
190
+ $newoptionvalue = "";
191
+ }
192
+
193
+ if ( substr($optionname, 0, 8) == "include-" ) {
194
+ $output[$optionname] = (boolean) $newoptionvalue;
195
+
196
+ } else if ( $optionname == GTM4WP_OPTION_EVENTS_DWLEXT ) {
197
+ $output[$optionname] = str_replace( " ", "", trim( $newoptionvalue ) );
198
+
199
+ } else if ( substr($optionname, 0, 6) == "event-" ) {
200
+ $output[$optionname] = (boolean) $newoptionvalue;
201
+
202
+ } else if ( substr($optionname, 0, 10) == "integrate-" ) {
203
+ $output[$optionname] = (boolean) $newoptionvalue;
204
+
205
+ } else if ( ( $optionname == GTM4WP_OPTION_GTM_CODE ) || ( $optionname == GTM4WP_OPTION_DATALAYER_NAME ) ) {
206
+ $newoptionvalue = trim($newoptionvalue);
207
+
208
+ if ( ( $optionname == GTM4WP_OPTION_GTM_CODE ) && ( ! preg_match( "/^GTM-[A-Z0-9]+$/", $newoptionvalue ) ) ) {
209
+ add_settings_error( GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_GTM_CODE . ']', __( "Invalid Google Tag Manager ID. Valid ID format: GTM-XXXXX", GTM4WP_TEXTDOMAIN ) );
210
+
211
+ } else if ( ( $optionname == GTM4WP_OPTION_DATALAYER_NAME ) && ( $newoptionvalue != "" ) && ( ! preg_match( "/^[a-zA-Z][a-zA-Z0-9_-]*$/", $newoptionvalue ) ) ) {
212
+ add_settings_error( GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_DATALAYER_NAME . ']', __( "Invalid dataLayer variable name. Please start with a character from a-z or A-Z followed by characters from a-z, A-Z, 0-9 or '_' or '-'!", GTM4WP_TEXTDOMAIN ) );
213
+
214
+ } else {
215
+ $output[$optionname] = $newoptionvalue;
216
+ }
217
+ } else {
218
+ $output[$optionname] = $newoptionvalue;
219
+ }
220
+ }
221
+
222
+ return $output;
223
+ }
224
+
225
+ function gtm4wp_admin_init() {
226
+ global $gtm4wp_includefieldtexts, $gtm4wp_eventfieldtexts, $gtm4wp_integratefieldtexts;
227
+
228
+ register_setting( GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS, "gtm4wp_sanitize_options" );
229
+
230
+ add_settings_section(
231
+ GTM4WP_ADMIN_GROUP_GENERAL,
232
+ __( 'General', GTM4WP_TEXTDOMAIN ),
233
+ 'gtm4wp_admin_output_section',
234
+ GTM4WP_ADMINSLUG
235
+ );
236
+
237
+ add_settings_field(
238
+ GTM4WP_ADMIN_GROUP_GTMID,
239
+ __( 'Google Tag Manager ID', GTM4WP_TEXTDOMAIN ),
240
+ 'gtm4wp_admin_output_field',
241
+ GTM4WP_ADMINSLUG,
242
+ GTM4WP_ADMIN_GROUP_GENERAL,
243
+ array(
244
+ "label_for" => GTM4WP_ADMIN_GROUP_GTMID,
245
+ "description" => __( "Enter your Google Tag Manager ID here.", GTM4WP_TEXTDOMAIN )
246
+ )
247
+ );
248
+
249
+ add_settings_section(
250
+ GTM4WP_ADMIN_GROUP_INCLUDES,
251
+ __( 'Basic data', GTM4WP_TEXTDOMAIN ),
252
+ 'gtm4wp_admin_output_section',
253
+ GTM4WP_ADMINSLUG
254
+ );
255
+
256
+ foreach($gtm4wp_includefieldtexts as $fieldid => $fielddata) {
257
+ add_settings_field(
258
+ "gtm4wp-admin-" . $fieldid . "-id",
259
+ $fielddata["label"],
260
+ 'gtm4wp_admin_output_field',
261
+ GTM4WP_ADMINSLUG,
262
+ GTM4WP_ADMIN_GROUP_INCLUDES,
263
+ array(
264
+ "label_for" => "gtm4wp-options[" . $fieldid . "]",
265
+ "description" => $fielddata["description"],
266
+ "optionfieldid" => $fieldid
267
+ )
268
+ );
269
+ }
270
+
271
+ add_settings_section(
272
+ GTM4WP_ADMIN_GROUP_EVENTS,
273
+ __( 'Events', GTM4WP_TEXTDOMAIN ),
274
+ 'gtm4wp_admin_output_section',
275
+ GTM4WP_ADMINSLUG
276
+ );
277
+
278
+ foreach($gtm4wp_eventfieldtexts as $fieldid => $fielddata) {
279
+ add_settings_field(
280
+ "gtm4wp-admin-" . $fieldid . "-id",
281
+ $fielddata["label"],
282
+ 'gtm4wp_admin_output_field',
283
+ GTM4WP_ADMINSLUG,
284
+ GTM4WP_ADMIN_GROUP_EVENTS,
285
+ array(
286
+ "label_for" => "gtm4wp-options[" . $fieldid . "]",
287
+ "description" => $fielddata["description"],
288
+ "optionfieldid" => $fieldid
289
+ )
290
+ );
291
+ }
292
+
293
+ add_settings_section(
294
+ GTM4WP_ADMIN_GROUP_INTEGRATION,
295
+ __( 'Integration', GTM4WP_TEXTDOMAIN ),
296
+ 'gtm4wp_admin_output_section',
297
+ GTM4WP_ADMINSLUG
298
+ );
299
+
300
+ foreach($gtm4wp_integratefieldtexts as $fieldid => $fielddata) {
301
+ add_settings_field(
302
+ "gtm4wp-admin-" . $fieldid . "-id",
303
+ $fielddata["label"],
304
+ 'gtm4wp_admin_output_field',
305
+ GTM4WP_ADMINSLUG,
306
+ GTM4WP_ADMIN_GROUP_INTEGRATION,
307
+ array(
308
+ "label_for" => "gtm4wp-options[" . $fieldid . "]",
309
+ "description" => $fielddata["description"],
310
+ "optionfieldid" => $fieldid,
311
+ "plugintocheck" => $fielddata["plugintocheck"]
312
+ )
313
+ );
314
+ }
315
+
316
+ add_settings_section(
317
+ GTM4WP_ADMIN_GROUP_ADVANCED,
318
+ __( 'Advanced', GTM4WP_TEXTDOMAIN ),
319
+ 'gtm4wp_admin_output_section',
320
+ GTM4WP_ADMINSLUG
321
+ );
322
+
323
+ add_settings_field(
324
+ GTM4WP_ADMIN_GROUP_DATALAYER,
325
+ __( 'dataLayer variable name', GTM4WP_TEXTDOMAIN ),
326
+ 'gtm4wp_admin_output_field',
327
+ GTM4WP_ADMINSLUG,
328
+ GTM4WP_ADMIN_GROUP_ADVANCED,
329
+ array(
330
+ "label_for" => GTM4WP_ADMIN_GROUP_DATALAYER,
331
+ "description" => __( "In some cases you need to rename the dataLayer variable. You can enter your name here. Leave black for default name: dataLayer", GTM4WP_TEXTDOMAIN )
332
+ )
333
+ );
334
+
335
+ add_settings_section(
336
+ GTM4WP_ADMIN_GROUP_CREDITS,
337
+ __( 'Credits', GTM4WP_TEXTDOMAIN ),
338
+ 'gtm4wp_admin_output_section',
339
+ GTM4WP_ADMINSLUG
340
+ );
341
+
342
+ add_settings_field(
343
+ GTM4WP_ADMIN_GROUP_INFO,
344
+ __( 'Author', GTM4WP_TEXTDOMAIN ),
345
+ 'gtm4wp_admin_output_field',
346
+ GTM4WP_ADMINSLUG,
347
+ GTM4WP_ADMIN_GROUP_CREDITS,
348
+ array(
349
+ "label_for" => GTM4WP_ADMIN_GROUP_INFO,
350
+ "description" => '<strong>Thomas Geiger</strong><br />
351
+ Website: <a href="http://www.duracelltomi.com/utm_source=wpadmin&amp;utm_medium=link&amp;utm_content=credittab&amp;utm_campaign=Wordpress-Admin" target="_blank">duracelltomi.com</a><br />
352
+ <a href="https://www.linkedin.com/in/duracelltomi" target="_blank">Me on LinkedIn</a><br />
353
+ <a href="http://www.linkedin.com/company/jabjab-online-marketing-ltd-" target="_blank">JabJab Online Marketing on LinkedIn</a>'
354
+ )
355
+ );
356
+
357
+ }
358
+
359
+ function gtm4wp_show_admin_page() {
360
+ ?>
361
+ <div class="wrap">
362
+ <div id="icon-options-general" class="icon32"><br /></div>
363
+ <h2><?php _e( 'Google Tag Manager for WordPress options', GTM4WP_TEXTDOMAIN ); ?></h2>
364
+ <form action="options.php" method="post">
365
+ <?php settings_fields( GTM4WP_ADMIN_GROUP ); ?>
366
+ <?php do_settings_sections( GTM4WP_ADMINSLUG ); ?>
367
+ <?php submit_button(); ?>
368
+
369
+ </form>
370
+ </div>
371
+ <?php
372
+ }
373
+
374
+ function gtm4wp_add_admin_page() {
375
+ add_options_page(
376
+ __( 'Google Tag Manager for WordPress settings', GTM4WP_TEXTDOMAIN ),
377
+ __( 'Google Tag Manager', GTM4WP_TEXTDOMAIN ),
378
+ 'manage_options',
379
+ GTM4WP_ADMINSLUG,
380
+ 'gtm4wp_show_admin_page'
381
+ );
382
+ }
383
+
384
+ function gtm4wp_add_admin_js($hook) {
385
+ global $gtp4wp_plugin_url;
386
+
387
+ if ( $hook == "settings_page_" . GTM4WP_ADMINSLUG ) {
388
+ wp_enqueue_script( "admin-tabcreator", $gtp4wp_plugin_url . "/js/admin-tabcreator.js", array( "jquery-core" ), "1.0" );
389
+
390
+ wp_enqueue_style( "gtm4wp-validate", $gtp4wp_plugin_url . "/css/admin-gtm4wp.css", array(), "1.0" );
391
+ }
392
+ }
393
+
394
+ function gtm4wp_admin_head() {
395
+ echo '
396
+ <script type="text/javascript">
397
+ jQuery(function() {
398
+ jQuery( "#gtm4wp-options\\\\[gtm-code\\\\]" )
399
+ .bind( "blur", function() {
400
+ var gtmid_regex = /^GTM-[A-Z0-9]+$/;
401
+ if ( ! gtmid_regex.test( jQuery( this ).val() ) ) {
402
+ alert( "' . __( "This does not seems to be a valid Google Tag Manager ID! Please check and try again", GTM4WP_TEXTDOMAIN ) . '" );
403
+ jQuery( this ).focus();
404
+ }
405
+ });
406
+
407
+ jQuery( "#gtm4wp-options\\\\[gtm-datalayer-variable-name\\\\]" )
408
+ .bind( "blur", function() {
409
+ var currentval = jQuery( this ).val();
410
+ if ( currentval != "" ) {
411
+ // I know this is not the exact definition for a variable name but I think other kind of variable names should not be used.
412
+ var gtmvarname_regex = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
413
+ if ( ! gtmvarname_regex.test( currentval ) ) {
414
+ alert( "' . __( "This does not seems to be a valid JavaScript variable name! Please check and try again", GTM4WP_TEXTDOMAIN ) . '" );
415
+ jQuery( this ).focus();
416
+ }
417
+ }
418
+ });
419
+ });
420
+ </script>';
421
+ }
422
+
423
+ function gtm4wp_show_warning() {
424
+ global $gtm4wp_options, $gtp4wp_plugin_url, $gtm4wp_integratefieldtexts;
425
+
426
+ if ( trim( $gtm4wp_options[GTM4WP_OPTION_GTM_CODE] ) == "" ) {
427
+ echo '<div id="message" class="error"><p><strong>' . sprintf( __( 'To start using Google Tag Manager for WordPress, please <a href="%s">enter your GTM ID</a>', GTM4WP_TEXTDOMAIN ), "options-general.php?page=" . GTM4WP_ADMINSLUG ) . '</strong></p></div>';
428
+ }
429
+
430
+ if ( $gtm4wp_options[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE] && is_plugin_active( $gtm4wp_integratefieldtexts[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE]["plugintocheck"] ) ) {
431
+ $woo_ga_options = get_option( "woocommerce_google_analytics_settings" );
432
+ if ( $woo_ga_options ) {
433
+ if ( "" != $woo_ga_options["ga_id"] ) {
434
+ echo '<div id="message" class="error"><p><strong>' . __( 'Possible duplacate tag issue: you should disable Google Analytics tracking <a href="admin.php?page=woocommerce_settings&tab=integration&section=google_analytics">in WooCommerce settings</a> by leaving Google Analytics ID field empty to prevent any duplicate tags being used on the frontend!', GTM4WP_TEXTDOMAIN ) . '</strong></p></div>';
435
+ }
436
+ }
437
+ }
438
+
439
+ }
440
+
441
+ add_action( 'admin_init', 'gtm4wp_admin_init' );
442
+ add_action( 'admin_menu', 'gtm4wp_add_admin_page' );
443
+ add_action( 'admin_enqueue_scripts', 'gtm4wp_add_admin_js' );
444
+ add_action( 'admin_notices', 'gtm4wp_show_warning' );
445
+ add_action( 'admin_head', 'gtm4wp_admin_head' );
common/readoptions.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ define( 'GTM4WP_OPTIONS', 'gtm4wp-options' );
3
+ define( 'GTM4WP_OPTION_GTM_CODE', 'gtm-code' );
4
+ define( 'GTM4WP_OPTION_DATALAYER_NAME', 'gtm-datalayer-variable-name' );
5
+
6
+ define( 'GTM4WP_OPTION_INCLUDE_REMARKETING', 'include-remarketing' );
7
+ define( 'GTM4WP_OPTION_INCLUDE_LOGGEDIN', 'include-loggedin' );
8
+ define( 'GTM4WP_OPTION_INCLUDE_USERROLE', 'include-userrole' );
9
+ define( 'GTM4WP_OPTION_INCLUDE_POSTTYPE', 'include-posttype' );
10
+ define( 'GTM4WP_OPTION_INCLUDE_CATEGORIES', 'include-categories' );
11
+ define( 'GTM4WP_OPTION_INCLUDE_TAGS', 'include-tags' );
12
+ define( 'GTM4WP_OPTION_INCLUDE_AUTHOR', 'include-author' );
13
+ define( 'GTM4WP_OPTION_INCLUDE_POSTDATE', 'include-postdate' );
14
+ define( 'GTM4WP_OPTION_INCLUDE_POSTTITLE', 'include-posttitle' );
15
+ define( 'GTM4WP_OPTION_INCLUDE_SEARCHDATA', 'include-searchdata' );
16
+
17
+ define( 'GTM4WP_OPTION_EVENTS_OUTBOUND', 'event-outbound' );
18
+ define( 'GTM4WP_OPTION_EVENTS_DOWNLOADS', 'event-downloads' );
19
+ define( 'GTM4WP_OPTION_EVENTS_DWLEXT', 'event-download-extensions' );
20
+ define( 'GTM4WP_OPTION_EVENTS_EMAILCLICKS', 'event-email-clicks' );
21
+
22
+ define( 'GTM4WP_OPTION_INTEGRATE_WPCF7', 'integrate-wpcf7' );
23
+ define( 'GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE', 'integrate-woocommerce' );
24
+ define( 'GTM4WP_OPTION_INTEGRATE_WPECOMMERCE', 'integrate-wp-e-commerce' );
25
+
26
+ $gtm4wp_options = array();
27
+
28
+ $gtm4wp_defaultoptions = array(
29
+ GTM4WP_OPTION_GTM_CODE => "",
30
+ GTM4WP_OPTION_DATALAYER_NAME => "",
31
+
32
+ GTM4WP_OPTION_INCLUDE_REMARKETING => false,
33
+ GTM4WP_OPTION_INCLUDE_LOGGEDIN => false,
34
+ GTM4WP_OPTION_INCLUDE_USERROLE => false,
35
+ GTM4WP_OPTION_INCLUDE_POSTTYPE => true,
36
+ GTM4WP_OPTION_INCLUDE_CATEGORIES => true,
37
+ GTM4WP_OPTION_INCLUDE_TAGS => true,
38
+ GTM4WP_OPTION_INCLUDE_AUTHOR => true,
39
+ GTM4WP_OPTION_INCLUDE_POSTDATE => false,
40
+ GTM4WP_OPTION_INCLUDE_POSTTITLE => false,
41
+ GTM4WP_OPTION_INCLUDE_SEARCHDATA => false,
42
+
43
+ GTM4WP_OPTION_EVENTS_OUTBOUND => true,
44
+ GTM4WP_OPTION_EVENTS_DOWNLOADS => true,
45
+ GTM4WP_OPTION_EVENTS_DWLEXT => "pdf,doc,docx,xls,xlsx,ppt,pptx,zip,rar,gz,tar",
46
+ GTM4WP_OPTION_EVENTS_EMAILCLICKS => true,
47
+
48
+ GTM4WP_OPTION_INTEGRATE_WPCF7 => true,
49
+ GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE => false,
50
+ GTM4WP_OPTION_INTEGRATE_WPECOMMERCE => false
51
+ );
52
+
53
+ function gtm4wp_reload_options() {
54
+ global $gtm4wp_defaultoptions;
55
+
56
+ $storedoptions = (array) get_option( GTM4WP_OPTIONS );
57
+ if ( ! is_array( $gtm4wp_defaultoptions ) ) {
58
+ $gtm4wp_defaultoptions = array();
59
+ }
60
+
61
+ return array_merge( $gtm4wp_defaultoptions, $storedoptions );
62
+ }
63
+
64
+ function gtp4wp_debug_file( $debug_data ) {
65
+ $fp = fopen( dirname( __FILE__ ) . "/" . date("Y-m-d-H-i-s-u") . ".txt", "w" );
66
+ if ( $fp ) {
67
+ fwrite( $fp, $debug_data );
68
+ fclose( $fp );
69
+ }
70
+ }
71
+
72
+ $gtm4wp_options = gtm4wp_reload_options();
css/admin-gtm4wp.css ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .tabinfo {
2
+ display: block;
3
+ margin: 20px 10px;
4
+ }
5
+
6
+ .gtm4wp-plugin-active {
7
+ color: #0c0;
8
+ }
9
+
10
+ .gtm4wp-plugin-not-active {
11
+ color: #c00;
12
+ }
duracelltomi-google-tag-manager-for-wordpress.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: DuracellTomi's Google Tag Manager for Wordpress
4
+ Version: 0.1
5
+ Plugin URI: http://www.duracelltomi.com/google-tag-manager-for-wordpress/?utm_source=wpadmin&utm_medium=link&utm_content=pluginpage&utm_campaign=Wordpress-Admin
6
+ Description: The first Google Tag Manager plugin for WordPress with business goals in mind
7
+ Author: Thomas Geiger
8
+ Author URI: http://www.duracelltomi.com/
9
+ */
10
+
11
+ define( 'GTM4WP_VERSION', '0.1' );
12
+ define( 'GTM4WP_PATH', plugin_dir_path( __FILE__ ) );
13
+ define( 'GTM4WP_TEXTDOMAIN', 'gtm4wp-lang' );
14
+
15
+ $gtp4wp_plugin_url = plugin_dir_url( __FILE__ );
16
+ require_once( GTM4WP_PATH."/common/readoptions.php" );
17
+
18
+ function gtm4wp_init() {
19
+ load_plugin_textdomain( GTM4WP_TEXTDOMAIN, false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
20
+ if ( is_admin() ) {
21
+ require_once( GTM4WP_PATH."/admin/admin.php" );
22
+ } else {
23
+ require_once( GTM4WP_PATH."/public/frontend.php" );
24
+ }
25
+ }
26
+ add_action('plugins_loaded', 'gtm4wp_init');
integration/woocommerce.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $gtm4wp_woocommerce_completed_order_id = 0;
3
+ $gtp4wp_woocommerce_remarketing_sku_list = array();
4
+ $gtp4wp_woocommerce_remarketing_totalvalue = 0;
5
+
6
+ function gtm4wp_woocommerce_datalayer_filter_order( $dataLayer ) {
7
+ global $gtm4wp_woocommerce_completed_order_id, $woocommerce;
8
+
9
+ $order = new WC_Order( $gtm4wp_woocommerce_completed_order_id );
10
+
11
+ $dataLayer["transactionId"] = $order->get_order_number();
12
+ $dataLayer["transactionDate"] = date("c");
13
+ $dataLayer["transactionType"] = "sale";
14
+ $dataLayer["transactionAffiliation"] = get_bloginfo( 'name' );
15
+ $dataLayer["transactionTotal"] = $order->get_total();
16
+ $dataLayer["transactionShipping"] = $order->get_shipping();
17
+ $dataLayer["transactionTax"] = $order->get_total_tax();
18
+ $dataLayer["transactionPaymentType"] = $order->payment_method_title;
19
+ $dataLayer["transactionCurrency"] = get_woocommerce_currency();
20
+ $dataLayer["transactionShippingMethod"] = $order->get_shipping_method();
21
+ $dataLayer["transactionPromoCode"] = implode( ", ", $order->get_used_coupons() );
22
+
23
+ $_products = array();
24
+
25
+ if ( $order->get_items() ) {
26
+ foreach ( $order->get_items() as $item ) {
27
+ $_product = $order->get_product_from_item( $item );
28
+
29
+ if ( isset( $_product->variation_data ) ) {
30
+
31
+ $_category = woocommerce_get_formatted_variation( $_product->variation_data, true );
32
+
33
+ } else {
34
+ $out = array();
35
+ $categories = get_the_terms( $_product->id, 'product_cat' );
36
+ if ( $categories ) {
37
+ foreach ( $categories as $category ) {
38
+ $out[] = $category->name;
39
+ }
40
+ }
41
+
42
+ $_category = implode( " / ", $out );
43
+ }
44
+
45
+ $_products[] = array(
46
+ "id" => $_product->id,
47
+ "name" => $item['name'],
48
+ "sku" => $_product->get_sku() ? __( 'SKU:', GTM4WP_TEXTDOMAIN ) . ' ' . $_product->get_sku() : $_product->id,
49
+ "category" => $_category,
50
+ "price" => $order->get_item_total( $item ),
51
+ "currency" => get_woocommerce_currency(),
52
+ "quantity" => $item['qty']
53
+ );
54
+ }
55
+ }
56
+
57
+ $dataLayer["transactionProducts"] = $_products;
58
+
59
+ $dataLayer["event"] = "OrderCompleted";
60
+
61
+ return $dataLayer;
62
+ }
63
+
64
+ function gtm4wp_woocommerce_thankyou( $order_id ) {
65
+ global $gtm4wp_woocommerce_completed_order_id;
66
+
67
+ if ( 1 == get_post_meta( $order_id, '_ga_tracked', true ) ) {
68
+ return;
69
+ }
70
+
71
+ $gtm4wp_woocommerce_completed_order_id = $order_id;
72
+ add_filter( GTM4WP_WPFILTER_COMPILE_DATALAYER, "gtm4wp_woocommerce_datalayer_filter_order" );
73
+
74
+ update_post_meta( $order_id, '_ga_tracked', 1 );
75
+ }
76
+
77
+ function gtm4wp_woocommerce_before_shop_loop_item() {
78
+ global $product, $gtp4wp_woocommerce_remarketing_sku_list, $gtp4wp_woocommerce_remarketing_totalvalue;
79
+
80
+ if ( is_product() ) {
81
+ return;
82
+ }
83
+
84
+ $_sku = $product->get_sku();
85
+ if ( "" == $_sku ) {
86
+ $_sku = $product->id;
87
+ }
88
+
89
+ $gtp4wp_woocommerce_remarketing_sku_list[] = $_sku;
90
+ $gtp4wp_woocommerce_remarketing_totalvalue += $product->get_price();
91
+ }
92
+
93
+ function gtm4wp_woocommerce_before_single_product() {
94
+ global $product, $related, $gtp4wp_woocommerce_remarketing_sku_list, $gtp4wp_woocommerce_remarketing_totalvalue;
95
+
96
+ if ( ! is_product() ) {
97
+ return;
98
+ }
99
+
100
+ $_sku = $product->get_sku();
101
+ if ( "" == $_sku ) {
102
+ $_sku = $product->id;
103
+ }
104
+
105
+ $gtp4wp_woocommerce_remarketing_sku_list[] = $_sku;
106
+ $gtp4wp_woocommerce_remarketing_totalvalue += $product->get_price();
107
+ }
108
+
109
+ function gtm4wp_woocommerce_datalayer_filter_items( $dataLayer ) {
110
+ global $gtp4wp_woocommerce_remarketing_sku_list, $gtp4wp_woocommerce_remarketing_totalvalue;
111
+
112
+ if ( count ( $gtp4wp_woocommerce_remarketing_sku_list ) > 0 ) {
113
+ if ( count ( $gtp4wp_woocommerce_remarketing_sku_list ) == 1 ) {
114
+ $dataLayer["ecomm_prodid"] = $gtp4wp_woocommerce_remarketing_sku_list[0];
115
+ } else {
116
+ $dataLayer["ecomm_prodid"] = $gtp4wp_woocommerce_remarketing_sku_list;
117
+ }
118
+ $dataLayer["ecomm_totalvalue"] = $gtp4wp_woocommerce_remarketing_totalvalue;
119
+
120
+ if ( is_product_category() || is_product_tag() ) {
121
+ $dataLayer["ecomm_pagetype"] = "category";
122
+ } else if ( is_product() ) {
123
+ $dataLayer["ecomm_pagetype"] = "product";
124
+ } else if ( is_cart() ) {
125
+ $dataLayer["ecomm_pagetype"] = "cart";
126
+ } else {
127
+ $dataLayer["ecomm_pagetype"] = "siteview";
128
+ }
129
+ }
130
+
131
+ return $dataLayer;
132
+ }
133
+
134
+ add_action( "woocommerce_thankyou", "gtm4wp_woocommerce_thankyou" );
135
+ add_action( "woocommerce_before_shop_loop_item", "gtm4wp_woocommerce_before_shop_loop_item" );
136
+ add_action( "woocommerce_before_single_product", "gtm4wp_woocommerce_before_single_product" );
137
+ add_filter( GTM4WP_WPFILTER_COMPILE_DATALAYER, "gtm4wp_woocommerce_datalayer_filter_items" );
js/admin-tabcreator.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;jQuery( function() {
2
+ var admintabs = [];
3
+
4
+ jQuery("#wpbody form h3").each(function() {
5
+ admintabs.push('<a class="nav-tab" href="#">' + jQuery(this).text() + '</a>');
6
+
7
+ jQuery(this)
8
+ .remove();
9
+ });
10
+
11
+ jQuery("#wpbody form")
12
+ .prepend('<h2 class="nav-tab-wrapper">' + admintabs.join('') + '</h2>');
13
+
14
+ jQuery(".nav-tab-wrapper a")
15
+ .bind("click", function() {
16
+ jQuery(".nav-tab-wrapper a.nav-tab-active")
17
+ .removeClass("nav-tab-active");
18
+
19
+ jQuery("#wpbody form .tabinfo,#wpbody form .form-table")
20
+ .hide();
21
+
22
+ var tabindex = jQuery(this)
23
+ .addClass("nav-tab-active")
24
+ .index();
25
+
26
+ jQuery("#wpbody form .tabinfo:eq(" + tabindex + "),#wpbody form .form-table:eq(" + tabindex + ")")
27
+ .show();
28
+
29
+ return false;
30
+ });
31
+
32
+ jQuery(".nav-tab-wrapper a:first")
33
+ .trigger("click");
34
+ });
js/gtm4wp-contact-form-7-tracker.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ jQuery( function() {
2
+ jQuery( ".wpcf7" )
3
+ .on( 'mailsent.wpcf7', function(){
4
+ window[ gtm4wp_datalayer_name ].push({
5
+ 'event': 'ContactFormSubmitted'
6
+ });
7
+ });
8
+ });
js/gtm4wp-download-tracker.js ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function track_downloads(track_extensions) {
2
+ var gtm4wp_extensions_to_track = track_extensions.split(",");
3
+
4
+ for ( var i = 0; i < gtm4wp_extensions_to_track.length; i++ ) {
5
+ jQuery( "a[href$=\\." + gtm4wp_extensions_to_track[i].toLowerCase() + "], a[href$=\\." + gtm4wp_extensions_to_track[i].toUpperCase() + "]" )
6
+ .bind( "click", function() {
7
+ window[ gtm4wp_datalayer_name ].push({
8
+ 'event': 'DownloadClick',
9
+ 'linkhref': jQuery( this ).attr( "href" )
10
+ });
11
+ })
12
+ .attr( "target", "_blank" );
13
+ } // end for i
14
+ };
js/gtm4wp-email-link-tracker.js ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( function() {
2
+ jQuery( "a[href^=mailto]" )
3
+ .bind( "click", function() {
4
+ var gtm4wp_linkparts = jQuery( this ).attr( "href" ).split( ":" );
5
+
6
+ window[ gtm4wp_datalayer_name ].push({
7
+ 'event': 'EmailClick',
8
+ 'linkhref': gtm4wp_linkparts
9
+ });
10
+ })
11
+ .attr( "target", "_blank" );
12
+ });
js/gtm4wp-outbound-click-tracker.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( function() {
2
+ var gtm4wp_localdomain = window.location.hostname.replace( "www.", "" );
3
+
4
+ jQuery( "a[href^=http]" )
5
+ .each( function() {
6
+ var gtm4wp_linkhref = jQuery( this ).attr( "href" );
7
+
8
+ if ( gtm4wp_linkhref.indexOf( gtm4wp_localdomain ) == -1 ) {
9
+ jQuery( this )
10
+ .bind( "click", function() {
11
+ window[ gtm4wp_datalayer_name ].push({
12
+ 'event': 'OutboundClick',
13
+ 'linkhref': jQuery( this ).attr( "href" )
14
+ });
15
+ })
16
+ .attr( "target", "_blank" );
17
+ }
18
+ });
19
+ });
js/gtm4wp-woocommerce-tracker.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( function() {
2
+ jQuery( "body" )
3
+ .on( "added_to_cart", function() {
4
+ window[ gtm4wp_datalayer_name ].push({
5
+ 'event': 'AddProductToCart'
6
+ });
7
+ });
8
+
9
+ if ( window.location.search.indexOf( "added-to-cart" ) > -1 ) {
10
+ window[ gtm4wp_datalayer_name ].push({
11
+ 'event': 'AddProductToCart'
12
+ });
13
+ }
14
+ });
15
+
languages/en.pot ADDED
@@ -0,0 +1,319 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Tag Manager for WordPress\n"
4
+ "POT-Creation-Date: 2013-09-19 11:27+0100\n"
5
+ "PO-Revision-Date: 2013-09-19 11:27+0100\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: JabJab Online Marketing\n"
8
+ "Language: English\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.5.7\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Poedit-SearchPath-0: ..\n"
17
+
18
+ #: ../admin/admin.php:18
19
+ msgid "Remarketing variable"
20
+ msgstr ""
21
+
22
+ #: ../admin/admin.php:19
23
+ msgid ""
24
+ "Check this option to include a dataLayer variable where all dataLayer values "
25
+ "are stored to be included in your AdWords remarketing tag as a custom "
26
+ "variable field"
27
+ msgstr ""
28
+
29
+ #: ../admin/admin.php:22
30
+ msgid "Logged in status"
31
+ msgstr ""
32
+
33
+ #: ../admin/admin.php:23
34
+ msgid ""
35
+ "Check this option to include whether there is a logged in user on your "
36
+ "website."
37
+ msgstr ""
38
+
39
+ #: ../admin/admin.php:26
40
+ msgid "Logged in user role"
41
+ msgstr ""
42
+
43
+ #: ../admin/admin.php:27
44
+ msgid "Check this option to include the role of the logged in user."
45
+ msgstr ""
46
+
47
+ #: ../admin/admin.php:30
48
+ msgid "Posttype of current post/archive"
49
+ msgstr ""
50
+
51
+ #: ../admin/admin.php:31
52
+ msgid ""
53
+ "Check this option to include the type of the current post or archive page "
54
+ "(post, page or any custom post type)."
55
+ msgstr ""
56
+
57
+ #: ../admin/admin.php:34
58
+ msgid "Category list of current post/archive"
59
+ msgstr ""
60
+
61
+ #: ../admin/admin.php:35
62
+ msgid ""
63
+ "Check this option to include the category names of the current post or "
64
+ "archive page"
65
+ msgstr ""
66
+
67
+ #: ../admin/admin.php:38
68
+ msgid "Tags of current post"
69
+ msgstr ""
70
+
71
+ #: ../admin/admin.php:39
72
+ msgid "Check this option to include the tags of the current post."
73
+ msgstr ""
74
+
75
+ #: ../admin/admin.php:42
76
+ msgid "Post author name"
77
+ msgstr ""
78
+
79
+ #: ../admin/admin.php:43
80
+ msgid ""
81
+ "Check this option to include the author's name of the current post or author "
82
+ "page."
83
+ msgstr ""
84
+
85
+ #: ../admin/admin.php:46
86
+ msgid "Post date"
87
+ msgstr ""
88
+
89
+ #: ../admin/admin.php:47
90
+ msgid ""
91
+ "Check this option to include the date of the current post. This will include "
92
+ "4 dataLayer variables: full date, post year, post month, post date."
93
+ msgstr ""
94
+
95
+ #: ../admin/admin.php:50
96
+ msgid "Post title"
97
+ msgstr ""
98
+
99
+ #: ../admin/admin.php:51
100
+ msgid "Check this option to include the title of the current post."
101
+ msgstr ""
102
+
103
+ #: ../admin/admin.php:54
104
+ msgid "Search data"
105
+ msgstr ""
106
+
107
+ #: ../admin/admin.php:55
108
+ msgid ""
109
+ "Check this option to include the search term, referring page URL and number "
110
+ "of results on the search page."
111
+ msgstr ""
112
+
113
+ #: ../admin/admin.php:61
114
+ msgid "Outbound link click events"
115
+ msgstr ""
116
+
117
+ #: ../admin/admin.php:62
118
+ msgid ""
119
+ "Check this option to include a Tag Manager event when a visitor clicks on a "
120
+ "link directing the visitor out of your website."
121
+ msgstr ""
122
+
123
+ #: ../admin/admin.php:65
124
+ msgid "Download click events"
125
+ msgstr ""
126
+
127
+ #: ../admin/admin.php:66
128
+ msgid ""
129
+ "Check this option to include a Tag Manager event when a visitors clicks on a "
130
+ "link that leads to a downloadable file on your website."
131
+ msgstr ""
132
+
133
+ #: ../admin/admin.php:69
134
+ msgid "Extensions to track"
135
+ msgstr ""
136
+
137
+ #: ../admin/admin.php:70
138
+ msgid ""
139
+ "Enter a comma separated list of extensions to track when 'Include download "
140
+ "click events' option is set."
141
+ msgstr ""
142
+
143
+ #: ../admin/admin.php:73
144
+ msgid "Email click events"
145
+ msgstr ""
146
+
147
+ #: ../admin/admin.php:74
148
+ msgid ""
149
+ "Check this option to include a Tag Manager event when a visitor clicks on an "
150
+ "email link."
151
+ msgstr ""
152
+
153
+ #: ../admin/admin.php:80
154
+ msgid "Contact Form 7"
155
+ msgstr ""
156
+
157
+ #: ../admin/admin.php:81
158
+ msgid ""
159
+ "Check this to include a dataLayer event after a successfull form submission."
160
+ msgstr ""
161
+
162
+ #: ../admin/admin.php:85
163
+ msgid "WooCommerce"
164
+ msgstr ""
165
+
166
+ #: ../admin/admin.php:86
167
+ msgid ""
168
+ "Enable this and you will get:<br /> - Add-to-cart events<br /> - E-commerce "
169
+ "transaction data ready to be used with Google Analytics and Universal "
170
+ "Analytics tags<br /> - Google AdWords dynamic remarketing tags"
171
+ msgstr ""
172
+
173
+ #: ../admin/admin.php:101
174
+ msgid ""
175
+ "This plugin is intended to be used by IT guys and marketing staff. Please be "
176
+ "sure you read the <a href=\"https://developers.google.com/tag-manager/\" "
177
+ "target=\"_blank\">Google Tag Manager Help Center</a> before you start using "
178
+ "this plugin.<br /><br /><strong>Important:</strong> This plugin is still "
179
+ "<strong>beta</strong>. It has not been tested on many websites. There might "
180
+ "be issues with some plugins or themes!"
181
+ msgstr ""
182
+
183
+ #: ../admin/admin.php:107
184
+ msgid ""
185
+ "Here you can check what data is needed to be included in the dataLayer to be "
186
+ "able to access them in Google Tag Manager"
187
+ msgstr ""
188
+
189
+ #: ../admin/admin.php:113
190
+ msgid "Fire tags in Google Tag Manager on special events on your website"
191
+ msgstr ""
192
+
193
+ #: ../admin/admin.php:119
194
+ msgid ""
195
+ "Google Tag Manager for WordPress can integrate with several popular plugins. "
196
+ "Please check the plugins you would like to integrate with:"
197
+ msgstr ""
198
+
199
+ #: ../admin/admin.php:125
200
+ msgid ""
201
+ "You usually do not need to modify thoose settings. Please be carefull while "
202
+ "hacking here."
203
+ msgstr ""
204
+
205
+ #: ../admin/admin.php:131
206
+ msgid "Some info about the author of this plugin"
207
+ msgstr ""
208
+
209
+ #: ../admin/admin.php:171
210
+ msgid ""
211
+ "This plugin is <strong class=\"gtm4wp-plugin-active\">active</strong>, it is "
212
+ "strongly recomment to enable this integration!"
213
+ msgstr ""
214
+
215
+ #: ../admin/admin.php:173
216
+ msgid ""
217
+ "This plugin is <strong class=\"gtm4wp-plugin-not-active\">not active</"
218
+ "strong>, enabling this integration could cause issues on frontend!"
219
+ msgstr ""
220
+
221
+ #: ../admin/admin.php:214
222
+ msgid "Invalid Google Tag Manager ID. Valid ID format: GTM-XXXXX"
223
+ msgstr ""
224
+
225
+ #: ../admin/admin.php:217
226
+ msgid ""
227
+ "Invalid dataLayer variable name. Please start with a character from a-z or A-"
228
+ "Z followed by characters from a-z, A-Z, 0-9 or '_' or '-'!"
229
+ msgstr ""
230
+
231
+ #: ../admin/admin.php:237
232
+ msgid "General"
233
+ msgstr ""
234
+
235
+ #: ../admin/admin.php:244
236
+ msgid "Google Tag Manager ID"
237
+ msgstr ""
238
+
239
+ #: ../admin/admin.php:250
240
+ msgid "Enter your Google Tag Manager ID here."
241
+ msgstr ""
242
+
243
+ #: ../admin/admin.php:256
244
+ msgid "Basic data"
245
+ msgstr ""
246
+
247
+ #: ../admin/admin.php:278
248
+ msgid "Events"
249
+ msgstr ""
250
+
251
+ #: ../admin/admin.php:300
252
+ msgid "Integration"
253
+ msgstr ""
254
+
255
+ #: ../admin/admin.php:323
256
+ msgid "Advanced"
257
+ msgstr ""
258
+
259
+ #: ../admin/admin.php:330
260
+ msgid "dataLayer variable name"
261
+ msgstr ""
262
+
263
+ #: ../admin/admin.php:336
264
+ msgid ""
265
+ "In some cases you need to rename the dataLayer variable. You can enter your "
266
+ "name here. Leave black for default name: dataLayer"
267
+ msgstr ""
268
+
269
+ #: ../admin/admin.php:342
270
+ msgid "Credits"
271
+ msgstr ""
272
+
273
+ #: ../admin/admin.php:349
274
+ msgid "Author"
275
+ msgstr ""
276
+
277
+ #: ../admin/admin.php:368
278
+ msgid "Google Tag Manager for WordPress options"
279
+ msgstr ""
280
+
281
+ #: ../admin/admin.php:381
282
+ msgid "Google Tag Manager for WordPress settings"
283
+ msgstr ""
284
+
285
+ #: ../admin/admin.php:382
286
+ msgid "Google Tag Manager"
287
+ msgstr ""
288
+
289
+ #: ../admin/admin.php:407
290
+ msgid ""
291
+ "This does not seems to be a valid Google Tag Manager ID! Please check and "
292
+ "try again"
293
+ msgstr ""
294
+
295
+ #: ../admin/admin.php:419
296
+ msgid ""
297
+ "This does not seems to be a valid JavaScript variable name! Please check and "
298
+ "try again"
299
+ msgstr ""
300
+
301
+ #: ../admin/admin.php:432
302
+ #, php-format
303
+ msgid ""
304
+ "To start using Google Tag Manager for WordPress, please <a href=\"%s\">enter "
305
+ "your GTM ID</a>"
306
+ msgstr ""
307
+
308
+ #: ../admin/admin.php:439
309
+ msgid ""
310
+ "Possible duplacate tag issue: you should disable Google Analytics tracking "
311
+ "<a href=\"admin.php?"
312
+ "page=woocommerce_settings&tab=integration&section=google_analytics\">in "
313
+ "WooCommerce settings</a> by leaving Google Analytics ID field empty to "
314
+ "prevent any duplicate tags being used on the frontend!"
315
+ msgstr ""
316
+
317
+ #: ../integration/woocommerce.php:48
318
+ msgid "SKU:"
319
+ msgstr ""
languages/gtm4wp-lang-hu_HU.mo ADDED
Binary file
languages/gtm4wp-lang-hu_HU.po ADDED
@@ -0,0 +1,384 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Tag Manager for WordPress\n"
4
+ "POT-Creation-Date: 2013-09-19 11:27+0100\n"
5
+ "PO-Revision-Date: 2013-09-20 16:20+0100\n"
6
+ "Last-Translator: Thomas Geiger <duracelltomi@gmail.com>\n"
7
+ "Language-Team: JabJab Online Marketing\n"
8
+ "Language: English\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.5.7\n"
13
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Poedit-SearchPath-0: ..\n"
17
+
18
+ #: ../admin/admin.php:18
19
+ msgid "Remarketing variable"
20
+ msgstr "Remarketing változó"
21
+
22
+ #: ../admin/admin.php:19
23
+ msgid ""
24
+ "Check this option to include a dataLayer variable where all dataLayer values "
25
+ "are stored to be included in your AdWords remarketing tag as a custom "
26
+ "variable field"
27
+ msgstr ""
28
+ "Kapcsolja be ezt a beállítást, ha egy olyan dataLayer változót szeretne "
29
+ "létrehozni, amelyben minden egyéb dataLayer változó szerepel és "
30
+ "felhasználható AdWords remarketing listánál egyéni címkézéshez"
31
+
32
+ #: ../admin/admin.php:22
33
+ msgid "Logged in status"
34
+ msgstr "Bejelentkezett állapot"
35
+
36
+ #: ../admin/admin.php:23
37
+ msgid ""
38
+ "Check this option to include whether there is a logged in user on your "
39
+ "website."
40
+ msgstr ""
41
+ "Kapcsolja be ezt a beállítást, ha szeretné látni, van-e bejelentkezett "
42
+ "felhasználó az oldalán."
43
+
44
+ #: ../admin/admin.php:26
45
+ msgid "Logged in user role"
46
+ msgstr "Bejelentkezett felhasználó szerepköre"
47
+
48
+ #: ../admin/admin.php:27
49
+ msgid "Check this option to include the role of the logged in user."
50
+ msgstr ""
51
+ "Kapcsolja be ezt a beállítást, ha szeretné látni a bejelentkezett "
52
+ "felhasználó szerepkörét."
53
+
54
+ #: ../admin/admin.php:30
55
+ msgid "Posttype of current post/archive"
56
+ msgstr "Aktuális bejegyzés/arhív bejegyzés típusa"
57
+
58
+ #: ../admin/admin.php:31
59
+ msgid ""
60
+ "Check this option to include the type of the current post or archive page "
61
+ "(post, page or any custom post type)."
62
+ msgstr ""
63
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az aktuális bejegyzés vagy "
64
+ "arhív oldal bejegyzés típusát (bejegyzés, oldal vagy egyébi bejegyzés típus)"
65
+
66
+ #: ../admin/admin.php:34
67
+ msgid "Category list of current post/archive"
68
+ msgstr "Aktuális bejegyzés/arhív kategória listája"
69
+
70
+ #: ../admin/admin.php:35
71
+ msgid ""
72
+ "Check this option to include the category names of the current post or "
73
+ "archive page"
74
+ msgstr ""
75
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az aktuális bejegyzés vagy "
76
+ "arhív oldal kategória listáját."
77
+
78
+ #: ../admin/admin.php:38
79
+ msgid "Tags of current post"
80
+ msgstr "Aktuális bejegyzés címkéi"
81
+
82
+ #: ../admin/admin.php:39
83
+ msgid "Check this option to include the tags of the current post."
84
+ msgstr ""
85
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az aktuális bejegyzés "
86
+ "címkéit."
87
+
88
+ #: ../admin/admin.php:42
89
+ msgid "Post author name"
90
+ msgstr "Bejegyzés szerzője"
91
+
92
+ #: ../admin/admin.php:43
93
+ msgid ""
94
+ "Check this option to include the author's name of the current post or author "
95
+ "page."
96
+ msgstr ""
97
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az aktuális bejegyzés vagy "
98
+ "szerző oldal szerzőjének a nevét."
99
+
100
+ #: ../admin/admin.php:46
101
+ msgid "Post date"
102
+ msgstr "Bejegyzés dátuma"
103
+
104
+ #: ../admin/admin.php:47
105
+ msgid ""
106
+ "Check this option to include the date of the current post. This will include "
107
+ "4 dataLayer variables: full date, post year, post month, post date."
108
+ msgstr ""
109
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az aktuális bejegyzés "
110
+ "dátumát. 4 dataLayer változót tartalmaz: teljes dátum, bejegyzés éve, "
111
+ "bejegyzés hónapja, bejegyzés napja."
112
+
113
+ #: ../admin/admin.php:50
114
+ msgid "Post title"
115
+ msgstr "Bejegyzés címe"
116
+
117
+ #: ../admin/admin.php:51
118
+ msgid "Check this option to include the title of the current post."
119
+ msgstr ""
120
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az aktuális bejegyzés címét."
121
+
122
+ #: ../admin/admin.php:54
123
+ msgid "Search data"
124
+ msgstr "Keresési adatok"
125
+
126
+ #: ../admin/admin.php:55
127
+ msgid ""
128
+ "Check this option to include the search term, referring page URL and number "
129
+ "of results on the search page."
130
+ msgstr ""
131
+ "Kapcsolja be ezt a beállítást, ha szeretné látni az éppen keresett "
132
+ "kifejezést, a keresés hivatkozó oldalát és a találatok számát."
133
+
134
+ #: ../admin/admin.php:61
135
+ msgid "Outbound link click events"
136
+ msgstr "Esemény kimenő hivatkozásokra kattintáshoz"
137
+
138
+ #: ../admin/admin.php:62
139
+ msgid ""
140
+ "Check this option to include a Tag Manager event when a visitor clicks on a "
141
+ "link directing the visitor out of your website."
142
+ msgstr ""
143
+ "Kapcsolja be ezt a beállítást, ha szeretne Tag Manager eseményt kiváltani, "
144
+ "amikor egy látogató egy olyan linkre kattint oldalán, amely kivezet onnan "
145
+ "egy másik oldalra."
146
+
147
+ #: ../admin/admin.php:65
148
+ msgid "Download click events"
149
+ msgstr "Esemény letöltés kattintásokhoz"
150
+
151
+ #: ../admin/admin.php:66
152
+ msgid ""
153
+ "Check this option to include a Tag Manager event when a visitors clicks on a "
154
+ "link that leads to a downloadable file on your website."
155
+ msgstr ""
156
+ "Kapcsolja be ezt a beállítást, ha szeretne Tag Manager eseményt kiváltani, "
157
+ "amikor egy látogató egy olyan linkre kattint, amely egy letölthető fájlra "
158
+ "visz weboldalán."
159
+
160
+ #: ../admin/admin.php:69
161
+ msgid "Extensions to track"
162
+ msgstr "Követett kiterjesztések"
163
+
164
+ #: ../admin/admin.php:70
165
+ msgid ""
166
+ "Enter a comma separated list of extensions to track when 'Include download "
167
+ "click events' option is set."
168
+ msgstr ""
169
+ "Adjon meg egy vesszővel elválasztott felsorolást, hogy mely fájl "
170
+ "kiterjesztéseket kell követni a letöltések kezelése során."
171
+
172
+ #: ../admin/admin.php:73
173
+ msgid "Email click events"
174
+ msgstr "Esemény email link kattintásokhoz"
175
+
176
+ #: ../admin/admin.php:74
177
+ msgid ""
178
+ "Check this option to include a Tag Manager event when a visitor clicks on an "
179
+ "email link."
180
+ msgstr ""
181
+ "Kapcsolja be ezt a beállítást, ha szeretne Tag Manager eseményt kiváltani, "
182
+ "amikor egy látogató egy email linkre kattint."
183
+
184
+ #: ../admin/admin.php:80
185
+ msgid "Contact Form 7"
186
+ msgstr "Contact Form 7"
187
+
188
+ #: ../admin/admin.php:81
189
+ msgid ""
190
+ "Check this to include a dataLayer event after a successfull form submission."
191
+ msgstr ""
192
+ "Kapcsolja be ezt a beállítást, ha szeretne Tag Manager eseményt kiváltani "
193
+ "egy sikeres küldés után."
194
+
195
+ #: ../admin/admin.php:85
196
+ msgid "WooCommerce"
197
+ msgstr "WooCommerce"
198
+
199
+ #: ../admin/admin.php:86
200
+ msgid ""
201
+ "Enable this and you will get:<br /> - Add-to-cart events<br /> - E-commerce "
202
+ "transaction data ready to be used with Google Analytics and Universal "
203
+ "Analytics tags<br /> - Google AdWords dynamic remarketing tags"
204
+ msgstr ""
205
+ "Ha engedélyezi, használhat:<br /> - Eseményt a kosárba helyezés során<br /> "
206
+ "- E-kereskedelmi adatokat Google Analytics és Universal Analytics "
207
+ "tranzakciós címkékhez<br /> - Google AdWords dinamikus remarketing címkéket"
208
+
209
+ #: ../admin/admin.php:101
210
+ msgid ""
211
+ "This plugin is intended to be used by IT guys and marketing staff. Please be "
212
+ "sure you read the <a href=\"https://developers.google.com/tag-manager/\" "
213
+ "target=\"_blank\">Google Tag Manager Help Center</a> before you start using "
214
+ "this plugin.<br /><br /><strong>Important:</strong> This plugin is still "
215
+ "<strong>beta</strong>. It has not been tested on many websites. There might "
216
+ "be issues with some plugins or themes!"
217
+ msgstr ""
218
+ "Ez a bővítmény első sorban ITseknek és marketing csapatnak készült. Mielőtt "
219
+ "elkezdi használni, mindenképpen olvassa el a <a href=\"https://developers."
220
+ "google.com/tag-manager/\" target=\"_blank\">Google Tag Manager súgóját</a>."
221
+ "<br /><br /><strong>Fontos:</strong> Ez a bővítmény még <strong>béta</"
222
+ "strong> állapotban van. Eddig nem lett túl sok oldalon tesztelve. "
223
+ "Előfordulhatnak problémák más bővítményekkel vagy témákkal!"
224
+
225
+ #: ../admin/admin.php:107
226
+ msgid ""
227
+ "Here you can check what data is needed to be included in the dataLayer to be "
228
+ "able to access them in Google Tag Manager"
229
+ msgstr ""
230
+ "Itt állíthatja be, mely adatokat helyezze el ez a bővítmény a dataLayer "
231
+ "változba, hogy elérhetőek legyenek a Google Tag Manager felületén"
232
+
233
+ #: ../admin/admin.php:113
234
+ msgid "Fire tags in Google Tag Manager on special events on your website"
235
+ msgstr ""
236
+ "Google Tag Manager események generálása speciális események során weboldalán"
237
+
238
+ #: ../admin/admin.php:119
239
+ msgid ""
240
+ "Google Tag Manager for WordPress can integrate with several popular plugins. "
241
+ "Please check the plugins you would like to integrate with:"
242
+ msgstr ""
243
+ "Google Tag Manager for WordPress számos népszerű bővítménnyel tud "
244
+ "integrálódni. Kapcsolja be az alábbi listában, mely bővítmények "
245
+ "integrációját engedélyezi."
246
+
247
+ #: ../admin/admin.php:125
248
+ msgid ""
249
+ "You usually do not need to modify thoose settings. Please be carefull while "
250
+ "hacking here."
251
+ msgstr "Alapvetően itt nincs mit módosítani. Óvatosan, ha itt módosít valamit!"
252
+
253
+ #: ../admin/admin.php:131
254
+ msgid "Some info about the author of this plugin"
255
+ msgstr "Néhány információ ezen bővítmény szerzőjéről"
256
+
257
+ #: ../admin/admin.php:171
258
+ msgid ""
259
+ "This plugin is <strong class=\"gtm4wp-plugin-active\">active</strong>, it is "
260
+ "strongly recomment to enable this integration!"
261
+ msgstr ""
262
+ "Ez a bővítmény <strong class=\"gtm4wp-plugin-active\">aktív</strong>, "
263
+ "ajánlott bekapcsolni ezt az integrációt!"
264
+
265
+ #: ../admin/admin.php:173
266
+ msgid ""
267
+ "This plugin is <strong class=\"gtm4wp-plugin-not-active\">not active</"
268
+ "strong>, enabling this integration could cause issues on frontend!"
269
+ msgstr ""
270
+ "Ez a bővítmény <strong class=\"gtm4wp-plugin-not-active\">nem aktív</"
271
+ "strong>, az integráció bekapcsolása hibát eredményezhet weboldalán!"
272
+
273
+ #: ../admin/admin.php:214
274
+ msgid "Invalid Google Tag Manager ID. Valid ID format: GTM-XXXXX"
275
+ msgstr "Érvénytelen Google Tag Manager azonosító. Helyes formátum: GTM-XXXXX"
276
+
277
+ #: ../admin/admin.php:217
278
+ msgid ""
279
+ "Invalid dataLayer variable name. Please start with a character from a-z or A-"
280
+ "Z followed by characters from a-z, A-Z, 0-9 or '_' or '-'!"
281
+ msgstr ""
282
+ "Érvénytelen dataLAyer változó név. Kezdje mindenképpen egy betűvel az angol "
283
+ "a-z vagy A-Z tartományból, ezt követően használhat a-z, A-Z, 0-9 vagy '_' "
284
+ "vagy '-' karaktereket."
285
+
286
+ #: ../admin/admin.php:237
287
+ msgid "General"
288
+ msgstr "Általános"
289
+
290
+ #: ../admin/admin.php:244
291
+ msgid "Google Tag Manager ID"
292
+ msgstr "Google Tag Manager azonosító"
293
+
294
+ #: ../admin/admin.php:250
295
+ msgid "Enter your Google Tag Manager ID here."
296
+ msgstr "Itt adhatja meg a Google Tag Manager konténer azonosítót."
297
+
298
+ #: ../admin/admin.php:256
299
+ msgid "Basic data"
300
+ msgstr "Alapadatok"
301
+
302
+ #: ../admin/admin.php:278
303
+ msgid "Events"
304
+ msgstr "Események"
305
+
306
+ #: ../admin/admin.php:300
307
+ msgid "Integration"
308
+ msgstr "Integráció"
309
+
310
+ #: ../admin/admin.php:323
311
+ msgid "Advanced"
312
+ msgstr "Haladó"
313
+
314
+ #: ../admin/admin.php:330
315
+ msgid "dataLayer variable name"
316
+ msgstr "dataLayer változó neve"
317
+
318
+ #: ../admin/admin.php:336
319
+ msgid ""
320
+ "In some cases you need to rename the dataLayer variable. You can enter your "
321
+ "name here. Leave black for default name: dataLayer"
322
+ msgstr ""
323
+ "Bizonyos esetekben át kell neveznie a dataLayer változót. Itt megadhatja a "
324
+ "nevét. Hagyja üresen az alapértelmezett névhez: dataLayer"
325
+
326
+ #: ../admin/admin.php:342
327
+ msgid "Credits"
328
+ msgstr "Névjegy"
329
+
330
+ #: ../admin/admin.php:349
331
+ msgid "Author"
332
+ msgstr "Szerző"
333
+
334
+ #: ../admin/admin.php:368
335
+ msgid "Google Tag Manager for WordPress options"
336
+ msgstr "Google Tag Manager for WordPress beállítások"
337
+
338
+ #: ../admin/admin.php:381
339
+ msgid "Google Tag Manager for WordPress settings"
340
+ msgstr "Google Tag Manager for WordPress beállítások"
341
+
342
+ #: ../admin/admin.php:382
343
+ msgid "Google Tag Manager"
344
+ msgstr "Google Tag Manager"
345
+
346
+ #: ../admin/admin.php:407
347
+ msgid ""
348
+ "This does not seems to be a valid Google Tag Manager ID! Please check and "
349
+ "try again"
350
+ msgstr ""
351
+ "Ez nem tűnik érvényes Google Tag Manager azonosítónak. Kérem, ellenőrizze!"
352
+
353
+ #: ../admin/admin.php:419
354
+ msgid ""
355
+ "This does not seems to be a valid JavaScript variable name! Please check and "
356
+ "try again"
357
+ msgstr "Ez nem tűnik érvényes JavaScript változó névnek. Kérem, ellenőrizze!"
358
+
359
+ #: ../admin/admin.php:432
360
+ #, php-format
361
+ msgid ""
362
+ "To start using Google Tag Manager for WordPress, please <a href=\"%s\">enter "
363
+ "your GTM ID</a>"
364
+ msgstr ""
365
+ "A Google Tag Manager for WordPress használatának megkezdéséhez kérem, <a "
366
+ "href=\"%s\">adja meg azonosítóját</a>"
367
+
368
+ #: ../admin/admin.php:439
369
+ msgid ""
370
+ "Possible duplacate tag issue: you should disable Google Analytics tracking "
371
+ "<a href=\"admin.php?"
372
+ "page=woocommerce_settings&tab=integration&section=google_analytics\">in "
373
+ "WooCommerce settings</a> by leaving Google Analytics ID field empty to "
374
+ "prevent any duplicate tags being used on the frontend!"
375
+ msgstr ""
376
+ "Lehetséges dupla címke probléma: kapcsolja ki a Google Analytics mérést a <a "
377
+ "href=\"admin.php?"
378
+ "page=woocommerce_settings&tab=integration&section=google_analytics"
379
+ "\">WooCommerce beállításainál</a> úgy, hogy üresen hagyja a Google Analytics "
380
+ "ID sort. Így elkerülheti, hogy duplán mérje a látogatókat weboldalán."
381
+
382
+ #: ../integration/woocommerce.php:48
383
+ msgid "SKU:"
384
+ msgstr "Cikkszám:"
license.txt ADDED
@@ -0,0 +1,621 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU General Public License is a free, copyleft license for
11
+ software and other kinds of works.
12
+
13
+ The licenses for most software and other practical works are designed
14
+ to take away your freedom to share and change the works. By contrast,
15
+ the GNU General Public License is intended to guarantee your freedom to
16
+ share and change all versions of a program--to make sure it remains free
17
+ software for all its users. We, the Free Software Foundation, use the
18
+ GNU General Public License for most of our software; it applies also to
19
+ any other work released this way by its authors. You can apply it to
20
+ your programs, too.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you
30
+ these rights or asking you to surrender the rights. Therefore, you have
31
+ certain responsibilities if you distribute copies of the software, or if
32
+ you modify it: responsibilities to respect the freedom of others.
33
+
34
+ For example, if you distribute copies of such a program, whether
35
+ gratis or for a fee, you must pass on to the recipients the same
36
+ freedoms that you received. You must make sure that they, too, receive
37
+ or can get the source code. And you must show them these terms so they
38
+ know their rights.
39
+
40
+ Developers that use the GNU GPL protect your rights with two steps:
41
+ (1) assert copyright on the software, and (2) offer you this License
42
+ giving you legal permission to copy, distribute and/or modify it.
43
+
44
+ For the developers' and authors' protection, the GPL clearly explains
45
+ that there is no warranty for this free software. For both users' and
46
+ authors' sake, the GPL requires that modified versions be marked as
47
+ changed, so that their problems will not be attributed erroneously to
48
+ authors of previous versions.
49
+
50
+ Some devices are designed to deny users access to install or run
51
+ modified versions of the software inside them, although the manufacturer
52
+ can do so. This is fundamentally incompatible with the aim of
53
+ protecting users' freedom to change the software. The systematic
54
+ pattern of such abuse occurs in the area of products for individuals to
55
+ use, which is precisely where it is most unacceptable. Therefore, we
56
+ have designed this version of the GPL to prohibit the practice for those
57
+ products. If such problems arise substantially in other domains, we
58
+ stand ready to extend this provision to those domains in future versions
59
+ of the GPL, as needed to protect the freedom of users.
60
+
61
+ Finally, every program is threatened constantly by software patents.
62
+ States should not allow patents to restrict development and use of
63
+ software on general-purpose computers, but in those that do, we wish to
64
+ avoid the special danger that patents applied to a free program could
65
+ make it effectively proprietary. To prevent this, the GPL assures that
66
+ patents cannot be used to render the program non-free.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ TERMS AND CONDITIONS
72
+
73
+ 0. Definitions.
74
+
75
+ "This License" refers to version 3 of the GNU General Public License.
76
+
77
+ "Copyright" also means copyright-like laws that apply to other kinds of
78
+ works, such as semiconductor masks.
79
+
80
+ "The Program" refers to any copyrightable work licensed under this
81
+ License. Each licensee is addressed as "you". "Licensees" and
82
+ "recipients" may be individuals or organizations.
83
+
84
+ To "modify" a work means to copy from or adapt all or part of the work
85
+ in a fashion requiring copyright permission, other than the making of an
86
+ exact copy. The resulting work is called a "modified version" of the
87
+ earlier work or a work "based on" the earlier work.
88
+
89
+ A "covered work" means either the unmodified Program or a work based
90
+ on the Program.
91
+
92
+ To "propagate" a work means to do anything with it that, without
93
+ permission, would make you directly or secondarily liable for
94
+ infringement under applicable copyright law, except executing it on a
95
+ computer or modifying a private copy. Propagation includes copying,
96
+ distribution (with or without modification), making available to the
97
+ public, and in some countries other activities as well.
98
+
99
+ To "convey" a work means any kind of propagation that enables other
100
+ parties to make or receive copies. Mere interaction with a user through
101
+ a computer network, with no transfer of a copy, is not conveying.
102
+
103
+ An interactive user interface displays "Appropriate Legal Notices"
104
+ to the extent that it includes a convenient and prominently visible
105
+ feature that (1) displays an appropriate copyright notice, and (2)
106
+ tells the user that there is no warranty for the work (except to the
107
+ extent that warranties are provided), that licensees may convey the
108
+ work under this License, and how to view a copy of this License. If
109
+ the interface presents a list of user commands or options, such as a
110
+ menu, a prominent item in the list meets this criterion.
111
+
112
+ 1. Source Code.
113
+
114
+ The "source code" for a work means the preferred form of the work
115
+ for making modifications to it. "Object code" means any non-source
116
+ form of a work.
117
+
118
+ A "Standard Interface" means an interface that either is an official
119
+ standard defined by a recognized standards body, or, in the case of
120
+ interfaces specified for a particular programming language, one that
121
+ is widely used among developers working in that language.
122
+
123
+ The "System Libraries" of an executable work include anything, other
124
+ than the work as a whole, that (a) is included in the normal form of
125
+ packaging a Major Component, but which is not part of that Major
126
+ Component, and (b) serves only to enable use of the work with that
127
+ Major Component, or to implement a Standard Interface for which an
128
+ implementation is available to the public in source code form. A
129
+ "Major Component", in this context, means a major essential component
130
+ (kernel, window system, and so on) of the specific operating system
131
+ (if any) on which the executable work runs, or a compiler used to
132
+ produce the work, or an object code interpreter used to run it.
133
+
134
+ The "Corresponding Source" for a work in object code form means all
135
+ the source code needed to generate, install, and (for an executable
136
+ work) run the object code and to modify the work, including scripts to
137
+ control those activities. However, it does not include the work's
138
+ System Libraries, or general-purpose tools or generally available free
139
+ programs which are used unmodified in performing those activities but
140
+ which are not part of the work. For example, Corresponding Source
141
+ includes interface definition files associated with source files for
142
+ the work, and the source code for shared libraries and dynamically
143
+ linked subprograms that the work is specifically designed to require,
144
+ such as by intimate data communication or control flow between those
145
+ subprograms and other parts of the work.
146
+
147
+ The Corresponding Source need not include anything that users
148
+ can regenerate automatically from other parts of the Corresponding
149
+ Source.
150
+
151
+ The Corresponding Source for a work in source code form is that
152
+ same work.
153
+
154
+ 2. Basic Permissions.
155
+
156
+ All rights granted under this License are granted for the term of
157
+ copyright on the Program, and are irrevocable provided the stated
158
+ conditions are met. This License explicitly affirms your unlimited
159
+ permission to run the unmodified Program. The output from running a
160
+ covered work is covered by this License only if the output, given its
161
+ content, constitutes a covered work. This License acknowledges your
162
+ rights of fair use or other equivalent, as provided by copyright law.
163
+
164
+ You may make, run and propagate covered works that you do not
165
+ convey, without conditions so long as your license otherwise remains
166
+ in force. You may convey covered works to others for the sole purpose
167
+ of having them make modifications exclusively for you, or provide you
168
+ with facilities for running those works, provided that you comply with
169
+ the terms of this License in conveying all material for which you do
170
+ not control copyright. Those thus making or running the covered works
171
+ for you must do so exclusively on your behalf, under your direction
172
+ and control, on terms that prohibit them from making any copies of
173
+ your copyrighted material outside their relationship with you.
174
+
175
+ Conveying under any other circumstances is permitted solely under
176
+ the conditions stated below. Sublicensing is not allowed; section 10
177
+ makes it unnecessary.
178
+
179
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
+
181
+ No covered work shall be deemed part of an effective technological
182
+ measure under any applicable law fulfilling obligations under article
183
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
+ similar laws prohibiting or restricting circumvention of such
185
+ measures.
186
+
187
+ When you convey a covered work, you waive any legal power to forbid
188
+ circumvention of technological measures to the extent such circumvention
189
+ is effected by exercising rights under this License with respect to
190
+ the covered work, and you disclaim any intention to limit operation or
191
+ modification of the work as a means of enforcing, against the work's
192
+ users, your or third parties' legal rights to forbid circumvention of
193
+ technological measures.
194
+
195
+ 4. Conveying Verbatim Copies.
196
+
197
+ You may convey verbatim copies of the Program's source code as you
198
+ receive it, in any medium, provided that you conspicuously and
199
+ appropriately publish on each copy an appropriate copyright notice;
200
+ keep intact all notices stating that this License and any
201
+ non-permissive terms added in accord with section 7 apply to the code;
202
+ keep intact all notices of the absence of any warranty; and give all
203
+ recipients a copy of this License along with the Program.
204
+
205
+ You may charge any price or no price for each copy that you convey,
206
+ and you may offer support or warranty protection for a fee.
207
+
208
+ 5. Conveying Modified Source Versions.
209
+
210
+ You may convey a work based on the Program, or the modifications to
211
+ produce it from the Program, in the form of source code under the
212
+ terms of section 4, provided that you also meet all of these conditions:
213
+
214
+ a) The work must carry prominent notices stating that you modified
215
+ it, and giving a relevant date.
216
+
217
+ b) The work must carry prominent notices stating that it is
218
+ released under this License and any conditions added under section
219
+ 7. This requirement modifies the requirement in section 4 to
220
+ "keep intact all notices".
221
+
222
+ c) You must license the entire work, as a whole, under this
223
+ License to anyone who comes into possession of a copy. This
224
+ License will therefore apply, along with any applicable section 7
225
+ additional terms, to the whole of the work, and all its parts,
226
+ regardless of how they are packaged. This License gives no
227
+ permission to license the work in any other way, but it does not
228
+ invalidate such permission if you have separately received it.
229
+
230
+ d) If the work has interactive user interfaces, each must display
231
+ Appropriate Legal Notices; however, if the Program has interactive
232
+ interfaces that do not display Appropriate Legal Notices, your
233
+ work need not make them do so.
234
+
235
+ A compilation of a covered work with other separate and independent
236
+ works, which are not by their nature extensions of the covered work,
237
+ and which are not combined with it such as to form a larger program,
238
+ in or on a volume of a storage or distribution medium, is called an
239
+ "aggregate" if the compilation and its resulting copyright are not
240
+ used to limit the access or legal rights of the compilation's users
241
+ beyond what the individual works permit. Inclusion of a covered work
242
+ in an aggregate does not cause this License to apply to the other
243
+ parts of the aggregate.
244
+
245
+ 6. Conveying Non-Source Forms.
246
+
247
+ You may convey a covered work in object code form under the terms
248
+ of sections 4 and 5, provided that you also convey the
249
+ machine-readable Corresponding Source under the terms of this License,
250
+ in one of these ways:
251
+
252
+ a) Convey the object code in, or embodied in, a physical product
253
+ (including a physical distribution medium), accompanied by the
254
+ Corresponding Source fixed on a durable physical medium
255
+ customarily used for software interchange.
256
+
257
+ b) Convey the object code in, or embodied in, a physical product
258
+ (including a physical distribution medium), accompanied by a
259
+ written offer, valid for at least three years and valid for as
260
+ long as you offer spare parts or customer support for that product
261
+ model, to give anyone who possesses the object code either (1) a
262
+ copy of the Corresponding Source for all the software in the
263
+ product that is covered by this License, on a durable physical
264
+ medium customarily used for software interchange, for a price no
265
+ more than your reasonable cost of physically performing this
266
+ conveying of source, or (2) access to copy the
267
+ Corresponding Source from a network server at no charge.
268
+
269
+ c) Convey individual copies of the object code with a copy of the
270
+ written offer to provide the Corresponding Source. This
271
+ alternative is allowed only occasionally and noncommercially, and
272
+ only if you received the object code with such an offer, in accord
273
+ with subsection 6b.
274
+
275
+ d) Convey the object code by offering access from a designated
276
+ place (gratis or for a charge), and offer equivalent access to the
277
+ Corresponding Source in the same way through the same place at no
278
+ further charge. You need not require recipients to copy the
279
+ Corresponding Source along with the object code. If the place to
280
+ copy the object code is a network server, the Corresponding Source
281
+ may be on a different server (operated by you or a third party)
282
+ that supports equivalent copying facilities, provided you maintain
283
+ clear directions next to the object code saying where to find the
284
+ Corresponding Source. Regardless of what server hosts the
285
+ Corresponding Source, you remain obligated to ensure that it is
286
+ available for as long as needed to satisfy these requirements.
287
+
288
+ e) Convey the object code using peer-to-peer transmission, provided
289
+ you inform other peers where the object code and Corresponding
290
+ Source of the work are being offered to the general public at no
291
+ charge under subsection 6d.
292
+
293
+ A separable portion of the object code, whose source code is excluded
294
+ from the Corresponding Source as a System Library, need not be
295
+ included in conveying the object code work.
296
+
297
+ A "User Product" is either (1) a "consumer product", which means any
298
+ tangible personal property which is normally used for personal, family,
299
+ or household purposes, or (2) anything designed or sold for incorporation
300
+ into a dwelling. In determining whether a product is a consumer product,
301
+ doubtful cases shall be resolved in favor of coverage. For a particular
302
+ product received by a particular user, "normally used" refers to a
303
+ typical or common use of that class of product, regardless of the status
304
+ of the particular user or of the way in which the particular user
305
+ actually uses, or expects or is expected to use, the product. A product
306
+ is a consumer product regardless of whether the product has substantial
307
+ commercial, industrial or non-consumer uses, unless such uses represent
308
+ the only significant mode of use of the product.
309
+
310
+ "Installation Information" for a User Product means any methods,
311
+ procedures, authorization keys, or other information required to install
312
+ and execute modified versions of a covered work in that User Product from
313
+ a modified version of its Corresponding Source. The information must
314
+ suffice to ensure that the continued functioning of the modified object
315
+ code is in no case prevented or interfered with solely because
316
+ modification has been made.
317
+
318
+ If you convey an object code work under this section in, or with, or
319
+ specifically for use in, a User Product, and the conveying occurs as
320
+ part of a transaction in which the right of possession and use of the
321
+ User Product is transferred to the recipient in perpetuity or for a
322
+ fixed term (regardless of how the transaction is characterized), the
323
+ Corresponding Source conveyed under this section must be accompanied
324
+ by the Installation Information. But this requirement does not apply
325
+ if neither you nor any third party retains the ability to install
326
+ modified object code on the User Product (for example, the work has
327
+ been installed in ROM).
328
+
329
+ The requirement to provide Installation Information does not include a
330
+ requirement to continue to provide support service, warranty, or updates
331
+ for a work that has been modified or installed by the recipient, or for
332
+ the User Product in which it has been modified or installed. Access to a
333
+ network may be denied when the modification itself materially and
334
+ adversely affects the operation of the network or violates the rules and
335
+ protocols for communication across the network.
336
+
337
+ Corresponding Source conveyed, and Installation Information provided,
338
+ in accord with this section must be in a format that is publicly
339
+ documented (and with an implementation available to the public in
340
+ source code form), and must require no special password or key for
341
+ unpacking, reading or copying.
342
+
343
+ 7. Additional Terms.
344
+
345
+ "Additional permissions" are terms that supplement the terms of this
346
+ License by making exceptions from one or more of its conditions.
347
+ Additional permissions that are applicable to the entire Program shall
348
+ be treated as though they were included in this License, to the extent
349
+ that they are valid under applicable law. If additional permissions
350
+ apply only to part of the Program, that part may be used separately
351
+ under those permissions, but the entire Program remains governed by
352
+ this License without regard to the additional permissions.
353
+
354
+ When you convey a copy of a covered work, you may at your option
355
+ remove any additional permissions from that copy, or from any part of
356
+ it. (Additional permissions may be written to require their own
357
+ removal in certain cases when you modify the work.) You may place
358
+ additional permissions on material, added by you to a covered work,
359
+ for which you have or can give appropriate copyright permission.
360
+
361
+ Notwithstanding any other provision of this License, for material you
362
+ add to a covered work, you may (if authorized by the copyright holders of
363
+ that material) supplement the terms of this License with terms:
364
+
365
+ a) Disclaiming warranty or limiting liability differently from the
366
+ terms of sections 15 and 16 of this License; or
367
+
368
+ b) Requiring preservation of specified reasonable legal notices or
369
+ author attributions in that material or in the Appropriate Legal
370
+ Notices displayed by works containing it; or
371
+
372
+ c) Prohibiting misrepresentation of the origin of that material, or
373
+ requiring that modified versions of such material be marked in
374
+ reasonable ways as different from the original version; or
375
+
376
+ d) Limiting the use for publicity purposes of names of licensors or
377
+ authors of the material; or
378
+
379
+ e) Declining to grant rights under trademark law for use of some
380
+ trade names, trademarks, or service marks; or
381
+
382
+ f) Requiring indemnification of licensors and authors of that
383
+ material by anyone who conveys the material (or modified versions of
384
+ it) with contractual assumptions of liability to the recipient, for
385
+ any liability that these contractual assumptions directly impose on
386
+ those licensors and authors.
387
+
388
+ All other non-permissive additional terms are considered "further
389
+ restrictions" within the meaning of section 10. If the Program as you
390
+ received it, or any part of it, contains a notice stating that it is
391
+ governed by this License along with a term that is a further
392
+ restriction, you may remove that term. If a license document contains
393
+ a further restriction but permits relicensing or conveying under this
394
+ License, you may add to a covered work material governed by the terms
395
+ of that license document, provided that the further restriction does
396
+ not survive such relicensing or conveying.
397
+
398
+ If you add terms to a covered work in accord with this section, you
399
+ must place, in the relevant source files, a statement of the
400
+ additional terms that apply to those files, or a notice indicating
401
+ where to find the applicable terms.
402
+
403
+ Additional terms, permissive or non-permissive, may be stated in the
404
+ form of a separately written license, or stated as exceptions;
405
+ the above requirements apply either way.
406
+
407
+ 8. Termination.
408
+
409
+ You may not propagate or modify a covered work except as expressly
410
+ provided under this License. Any attempt otherwise to propagate or
411
+ modify it is void, and will automatically terminate your rights under
412
+ this License (including any patent licenses granted under the third
413
+ paragraph of section 11).
414
+
415
+ However, if you cease all violation of this License, then your
416
+ license from a particular copyright holder is reinstated (a)
417
+ provisionally, unless and until the copyright holder explicitly and
418
+ finally terminates your license, and (b) permanently, if the copyright
419
+ holder fails to notify you of the violation by some reasonable means
420
+ prior to 60 days after the cessation.
421
+
422
+ Moreover, your license from a particular copyright holder is
423
+ reinstated permanently if the copyright holder notifies you of the
424
+ violation by some reasonable means, this is the first time you have
425
+ received notice of violation of this License (for any work) from that
426
+ copyright holder, and you cure the violation prior to 30 days after
427
+ your receipt of the notice.
428
+
429
+ Termination of your rights under this section does not terminate the
430
+ licenses of parties who have received copies or rights from you under
431
+ this License. If your rights have been terminated and not permanently
432
+ reinstated, you do not qualify to receive new licenses for the same
433
+ material under section 10.
434
+
435
+ 9. Acceptance Not Required for Having Copies.
436
+
437
+ You are not required to accept this License in order to receive or
438
+ run a copy of the Program. Ancillary propagation of a covered work
439
+ occurring solely as a consequence of using peer-to-peer transmission
440
+ to receive a copy likewise does not require acceptance. However,
441
+ nothing other than this License grants you permission to propagate or
442
+ modify any covered work. These actions infringe copyright if you do
443
+ not accept this License. Therefore, by modifying or propagating a
444
+ covered work, you indicate your acceptance of this License to do so.
445
+
446
+ 10. Automatic Licensing of Downstream Recipients.
447
+
448
+ Each time you convey a covered work, the recipient automatically
449
+ receives a license from the original licensors, to run, modify and
450
+ propagate that work, subject to this License. You are not responsible
451
+ for enforcing compliance by third parties with this License.
452
+
453
+ An "entity transaction" is a transaction transferring control of an
454
+ organization, or substantially all assets of one, or subdividing an
455
+ organization, or merging organizations. If propagation of a covered
456
+ work results from an entity transaction, each party to that
457
+ transaction who receives a copy of the work also receives whatever
458
+ licenses to the work the party's predecessor in interest had or could
459
+ give under the previous paragraph, plus a right to possession of the
460
+ Corresponding Source of the work from the predecessor in interest, if
461
+ the predecessor has it or can get it with reasonable efforts.
462
+
463
+ You may not impose any further restrictions on the exercise of the
464
+ rights granted or affirmed under this License. For example, you may
465
+ not impose a license fee, royalty, or other charge for exercise of
466
+ rights granted under this License, and you may not initiate litigation
467
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
468
+ any patent claim is infringed by making, using, selling, offering for
469
+ sale, or importing the Program or any portion of it.
470
+
471
+ 11. Patents.
472
+
473
+ A "contributor" is a copyright holder who authorizes use under this
474
+ License of the Program or a work on which the Program is based. The
475
+ work thus licensed is called the contributor's "contributor version".
476
+
477
+ A contributor's "essential patent claims" are all patent claims
478
+ owned or controlled by the contributor, whether already acquired or
479
+ hereafter acquired, that would be infringed by some manner, permitted
480
+ by this License, of making, using, or selling its contributor version,
481
+ but do not include claims that would be infringed only as a
482
+ consequence of further modification of the contributor version. For
483
+ purposes of this definition, "control" includes the right to grant
484
+ patent sublicenses in a manner consistent with the requirements of
485
+ this License.
486
+
487
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488
+ patent license under the contributor's essential patent claims, to
489
+ make, use, sell, offer for sale, import and otherwise run, modify and
490
+ propagate the contents of its contributor version.
491
+
492
+ In the following three paragraphs, a "patent license" is any express
493
+ agreement or commitment, however denominated, not to enforce a patent
494
+ (such as an express permission to practice a patent or covenant not to
495
+ sue for patent infringement). To "grant" such a patent license to a
496
+ party means to make such an agreement or commitment not to enforce a
497
+ patent against the party.
498
+
499
+ If you convey a covered work, knowingly relying on a patent license,
500
+ and the Corresponding Source of the work is not available for anyone
501
+ to copy, free of charge and under the terms of this License, through a
502
+ publicly available network server or other readily accessible means,
503
+ then you must either (1) cause the Corresponding Source to be so
504
+ available, or (2) arrange to deprive yourself of the benefit of the
505
+ patent license for this particular work, or (3) arrange, in a manner
506
+ consistent with the requirements of this License, to extend the patent
507
+ license to downstream recipients. "Knowingly relying" means you have
508
+ actual knowledge that, but for the patent license, your conveying the
509
+ covered work in a country, or your recipient's use of the covered work
510
+ in a country, would infringe one or more identifiable patents in that
511
+ country that you have reason to believe are valid.
512
+
513
+ If, pursuant to or in connection with a single transaction or
514
+ arrangement, you convey, or propagate by procuring conveyance of, a
515
+ covered work, and grant a patent license to some of the parties
516
+ receiving the covered work authorizing them to use, propagate, modify
517
+ or convey a specific copy of the covered work, then the patent license
518
+ you grant is automatically extended to all recipients of the covered
519
+ work and works based on it.
520
+
521
+ A patent license is "discriminatory" if it does not include within
522
+ the scope of its coverage, prohibits the exercise of, or is
523
+ conditioned on the non-exercise of one or more of the rights that are
524
+ specifically granted under this License. You may not convey a covered
525
+ work if you are a party to an arrangement with a third party that is
526
+ in the business of distributing software, under which you make payment
527
+ to the third party based on the extent of your activity of conveying
528
+ the work, and under which the third party grants, to any of the
529
+ parties who would receive the covered work from you, a discriminatory
530
+ patent license (a) in connection with copies of the covered work
531
+ conveyed by you (or copies made from those copies), or (b) primarily
532
+ for and in connection with specific products or compilations that
533
+ contain the covered work, unless you entered into that arrangement,
534
+ or that patent license was granted, prior to 28 March 2007.
535
+
536
+ Nothing in this License shall be construed as excluding or limiting
537
+ any implied license or other defenses to infringement that may
538
+ otherwise be available to you under applicable patent law.
539
+
540
+ 12. No Surrender of Others' Freedom.
541
+
542
+ If conditions are imposed on you (whether by court order, agreement or
543
+ otherwise) that contradict the conditions of this License, they do not
544
+ excuse you from the conditions of this License. If you cannot convey a
545
+ covered work so as to satisfy simultaneously your obligations under this
546
+ License and any other pertinent obligations, then as a consequence you may
547
+ not convey it at all. For example, if you agree to terms that obligate you
548
+ to collect a royalty for further conveying from those to whom you convey
549
+ the Program, the only way you could satisfy both those terms and this
550
+ License would be to refrain entirely from conveying the Program.
551
+
552
+ 13. Use with the GNU Affero General Public License.
553
+
554
+ Notwithstanding any other provision of this License, you have
555
+ permission to link or combine any covered work with a work licensed
556
+ under version 3 of the GNU Affero General Public License into a single
557
+ combined work, and to convey the resulting work. The terms of this
558
+ License will continue to apply to the part which is the covered work,
559
+ but the special requirements of the GNU Affero General Public License,
560
+ section 13, concerning interaction through a network will apply to the
561
+ combination as such.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU General Public License from time to time. Such new versions will
567
+ be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
public/frontend.php ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ define( GTM4WP_WPFILTER_COMPILE_DATALAYER, "gtp4wp_compile_datalayer");
3
+ define( GTM4WP_WPFILTER_COMPILE_REMARKTING, "gtp4wp_compile_remarkering");
4
+
5
+ function gtm4wp_is_assoc($arr) {
6
+ // borrowed from
7
+ // http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check-if-an-array-is-associative-or-sequential
8
+ return array_keys($arr) !== range(0, count($arr) - 1);
9
+ }
10
+
11
+ function gtm4wp_add_basic_datalayer_data( $dataLayer ) {
12
+ global $current_user, $wp_query, $gtm4wp_options;
13
+
14
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_LOGGEDIN] ) {
15
+ if ( is_user_logged_in() ) {
16
+ $dataLayer["visitorLoginState"] = "logged-in";
17
+ } else {
18
+ $dataLayer["visitorLoginState"] = "logged-out";
19
+ }
20
+ }
21
+
22
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_USERROLE] ) {
23
+ get_currentuserinfo();
24
+ $dataLayer["visitorType"] = $current_user->roles[0];
25
+ }
26
+
27
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTTITLE] ) {
28
+ $dataLayer["pageTitle"] = wp_title( "|", false, "right" );
29
+ }
30
+
31
+ if ( is_singular() ) {
32
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTTYPE] ) {
33
+ $dataLayer["pagePostType"] = get_post_type();
34
+ $dataLayer["pagePostType2"] = "single-".get_post_type();
35
+ }
36
+
37
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_CATEGORIES] ) {
38
+ $_post_cats = get_the_category();
39
+ if ( $_post_cats ) {
40
+ $dataLayer["pageCategory"] = array();
41
+ foreach( $_post_cats as $_one_cat ) {
42
+ $dataLayer["pageCategory"][] = $_one_cat->slug;
43
+ }
44
+ }
45
+ }
46
+
47
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_TAGS] ) {
48
+ $_post_tags = get_the_tags();
49
+ if ( $_post_tags ) {
50
+ $dataLayer["pageAttributes"] = array();
51
+ foreach( $_post_tags as $_one_tag ) {
52
+ $dataLayer["pageAttributes"][] = $_one_tag->slug;
53
+ }
54
+ }
55
+ }
56
+
57
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_AUTHOR] ) {
58
+ $dataLayer["pagePostAuthor"] = get_the_author();
59
+ }
60
+
61
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTDATE] ) {
62
+ $dataLayer["pagePostDate"] = get_the_date();
63
+ $dataLayer["pagePostDateYear"] = get_the_date( "Y" );
64
+ $dataLayer["pagePostDateMonth"] = get_the_date( "m" );
65
+ $dataLayer["pagePostDateDay"] = get_the_date( "d" );
66
+ }
67
+ }
68
+
69
+ if ( is_archive() || is_post_type_archive() ) {
70
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTTYPE] ) {
71
+ $dataLayer["pagePostType"] = get_post_type();
72
+
73
+ if ( is_category() ) {
74
+ $dataLayer["pagePostType2"] = "category-".get_post_type();
75
+ } else if ( is_tag() ) {
76
+ $dataLayer["pagePostType2"] = "tag-".get_post_type();
77
+ } else if ( is_tax() ) {
78
+ $dataLayer["pagePostType2"] = "tax-".get_post_type();
79
+ } else if ( is_author() ) {
80
+ $dataLayer["pagePostType2"] = "author-".get_post_type();
81
+ } else if ( is_year() ) {
82
+ $dataLayer["pagePostType2"] = "year-".get_post_type();
83
+
84
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTDATE] ) {
85
+ $dataLayer["pagePostDateYear"] = get_the_date( "Y" );
86
+ }
87
+ } else if ( is_month() ) {
88
+ $dataLayer["pagePostType2"] = "month-".get_post_type();
89
+
90
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTDATE] ) {
91
+ $dataLayer["pagePostDateYear"] = get_the_date( "Y" );
92
+ $dataLayer["pagePostDateMonth"] = get_the_date( "m" );
93
+ }
94
+ } else if ( is_day() ) {
95
+ $dataLayer["pagePostType2"] = "day-".get_post_type();
96
+
97
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTDATE] ) {
98
+ $dataLayer["pagePostDate"] = get_the_date();
99
+ $dataLayer["pagePostDateYear"] = get_the_date( "Y" );
100
+ $dataLayer["pagePostDateMonth"] = get_the_date( "m" );
101
+ $dataLayer["pagePostDateDay"] = get_the_date( "d" );
102
+ }
103
+ } else if ( is_time() ) {
104
+ $dataLayer["pagePostType2"] = "time-".get_post_type();
105
+ } else if ( is_date() ) {
106
+ $dataLayer["pagePostType2"] = "date-".get_post_type();
107
+
108
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTDATE] ) {
109
+ $dataLayer["pagePostDate"] = get_the_date();
110
+ $dataLayer["pagePostDateYear"] = get_the_date( "Y" );
111
+ $dataLayer["pagePostDateMonth"] = get_the_date( "m" );
112
+ $dataLayer["pagePostDateDay"] = get_the_date( "d" );
113
+ }
114
+ }
115
+ }
116
+
117
+ if ( ( is_tax() || is_category() ) && $gtm4wp_options[GTM4WP_OPTION_INCLUDE_CATEGORIES] ) {
118
+ $_post_cats = get_the_category();
119
+ $dataLayer["pageCategory"] = array();
120
+ foreach( $_post_cats as $_one_cat ) {
121
+ $dataLayer["pageCategory"][] = $_one_cat->slug;
122
+ }
123
+ }
124
+
125
+ if ( ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_AUTHOR] ) && ( is_author() ) ) {
126
+ $dataLayer["pagePostAuthor"] = get_the_author();
127
+ }
128
+ }
129
+
130
+ if ( is_search() ) {
131
+ $dataLayer["siteSearchTerm"] = get_search_query();
132
+ $dataLayer["siteSearchFrom"] = $_SERVER["HTTP_REFERER"];
133
+ $dataLayer["siteSearchResults"] = $wp_query->post_count;
134
+ }
135
+
136
+ if ( is_front_page() && $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTTYPE] ) {
137
+ $dataLayer["pagePostType"] = "frontpage";
138
+ }
139
+
140
+ if ( !is_front_page() && is_home() && $gtm4wp_options[GTM4WP_OPTION_INCLUDE_POSTTYPE] ) {
141
+ $dataLayer["pagePostType"] = "bloghome";
142
+ }
143
+
144
+ return $dataLayer;
145
+ }
146
+
147
+ function gtm4wp_get_the_gtm_tag() {
148
+ global $gtm4wp_options;
149
+
150
+ $_gtm_tag = '';
151
+
152
+ if ( $gtm4wp_options[GTM4WP_OPTION_DATALAYER_NAME] == "" ) {
153
+ $gtm4wp_datalayer_name = "dataLayer";
154
+ } else {
155
+ $gtm4wp_datalayer_name = $gtm4wp_options[GTM4WP_OPTION_DATALAYER_NAME];
156
+ }
157
+
158
+ if ( $gtm4wp_options[GTM4WP_OPTION_GTM_CODE] != "" ) {
159
+ $_gtm_tag .= '
160
+ <!-- Google Tag Manager for WordPress by DuracellTomi -->
161
+ <script type="text/javascript">';
162
+
163
+ $gtm4wp_datalayer_data = array();
164
+ $gtm4wp_datalayer_data = (array) apply_filters( GTM4WP_WPFILTER_COMPILE_DATALAYER, $gtm4wp_datalayer_data );
165
+
166
+ if ( $gtm4wp_options[GTM4WP_OPTION_INCLUDE_REMARKETING] ) {
167
+ // add adwords remarketing tags as suggested here:
168
+ // https://support.google.com/tagmanager/answer/3002580?hl=en
169
+
170
+ $gtm4wp_remarketing_tags = (array) apply_filters( GTM4WP_WPFILTER_COMPILE_REMARKTING, $gtm4wp_datalayer_data );
171
+
172
+ $_gtm_tag .= '
173
+ var google_tag_params = ' . json_encode( $gtm4wp_remarketing_tags ) . ';';
174
+ $gtm4wp_datalayer_data["google_tag_params"] = "-~-window.google_tag_params-~-";
175
+ }
176
+
177
+ $_gtm_tag .= '
178
+ var gtm4wp_datalayer_name = "' . $gtm4wp_datalayer_name . '";';
179
+
180
+ if ( $gtm4wp_options[GTM4WP_OPTION_EVENTS_DOWNLOADS] ) {
181
+ $_gtm_tag .= '
182
+ jQuery( function() {
183
+ track_downloads( "'.str_replace('"', '', $gtm4wp_options[GTM4WP_OPTION_EVENTS_DWLEXT]).'" );
184
+ });';
185
+ }
186
+
187
+ $_gtm_tag .= '
188
+ var ' . $gtm4wp_datalayer_name . ' = [' . str_replace(
189
+ array( '"-~-', '-~-"' ),
190
+ array( "", "" ),
191
+ json_encode( $gtm4wp_datalayer_data )
192
+ ) . '];
193
+ </script>';
194
+
195
+ $_gtm_tag .= '
196
+ <noscript><iframe src="//www.googletagmanager.com/ns.html?id='.$gtm4wp_options[GTM4WP_OPTION_GTM_CODE].'"
197
+ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
198
+ <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':
199
+ new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],
200
+ j=d.createElement(s),dl=l!=\''.$gtm4wp_datalayer_name.'\'?\'&l=\'+l:\'\';j.async=true;j.src=
201
+ \'//www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);
202
+ })(window,document,\'script\',\''.$gtm4wp_datalayer_name.'\',\''.$gtm4wp_options[GTM4WP_OPTION_GTM_CODE].'\');</script>
203
+ <!-- End Google Tag Manager -->';
204
+ }
205
+
206
+ return $_gtm_tag;
207
+ }
208
+
209
+ function gtm4wp_the_gtm_tag() {
210
+ echo gtm4wp_get_the_gtm_tag();
211
+ }
212
+
213
+ function gtm4wp_enqueue_scripts() {
214
+ global $gtm4wp_options, $gtp4wp_plugin_url;
215
+
216
+ if ( $gtm4wp_options[GTM4WP_OPTION_EVENTS_OUTBOUND] ) {
217
+ wp_enqueue_script( "gtm4wp-outbound-click-tracker", $gtp4wp_plugin_url . "/js/gtm4wp-outbound-click-tracker.js", array( "jquery-core" ), "1.0", false );
218
+ }
219
+
220
+ if ( $gtm4wp_options[GTM4WP_OPTION_EVENTS_DOWNLOADS] ) {
221
+ wp_enqueue_script( "gtm4wp-download-tracker", $gtp4wp_plugin_url . "/js/gtm4wp-download-tracker.js", array( "jquery-core" ), "1.0", false );
222
+ }
223
+
224
+ if ( $gtm4wp_options[GTM4WP_OPTION_EVENTS_EMAILCLICKS] ) {
225
+ wp_enqueue_script( "gtm4wp-email-link-tracker", $gtp4wp_plugin_url . "/js/gtm4wp-email-link-tracker.js", array( "jquery-core" ), "1.0", false );
226
+ }
227
+
228
+ if ( $gtm4wp_options[GTM4WP_OPTION_INTEGRATE_WPCF7] ) {
229
+ wp_enqueue_script( "gtm4wp-contact-form-7-tracker", $gtp4wp_plugin_url . "/js/gtm4wp-contact-form-7-tracker.js", array( "jquery-core" ), "1.0", false );
230
+ }
231
+
232
+ if ( $gtm4wp_options[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE] ) {
233
+ require_once( dirname( __FILE__ ) . "/../integration/woocommerce.php" );
234
+ wp_enqueue_script( "gtm4wp-woocommerce-tracker", $gtp4wp_plugin_url . "/js/gtm4wp-woocommerce-tracker.js", array( "jquery-core" ), "1.0", false );
235
+ }
236
+ }
237
+
238
+ function gtm4wp_wp_footer() {
239
+ gtm4wp_the_gtm_tag();
240
+ }
241
+
242
+ add_action( "wp_enqueue_scripts", "gtm4wp_enqueue_scripts" );
243
+ add_action( "wp_footer", "gtm4wp_wp_footer" );
244
+ add_filter( GTM4WP_WPFILTER_COMPILE_DATALAYER, "gtm4wp_add_basic_datalayer_data" );
readme.txt ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === DuracellTomi's Google Tag Manager for WordPress ===
2
+ Contributors: duracelltomi
3
+ Donate link: http://duracelltomi.com/
4
+ Tags: google tag manager, tag manager
5
+ Requires at least: 3.0.1
6
+ Tested up to: 3.6.1
7
+ Stable tag: 0.1
8
+ License: GPLv3
9
+ License URI: http://www.gnu.org/licenses/gpl.html
10
+
11
+ The first Google Tag Manager plugin for WordPress with business goals in mind.
12
+
13
+ == Description ==
14
+
15
+ Google Tag Manager is Google's free tool to everyone to be able to manage your analyitcs, PPC and other code snipetts
16
+ using an intuitive web UI.
17
+
18
+ This plugin can place the necessary container code snippet into your website so that you do not need to edit your theme files.
19
+
20
+ = Basic data included =
21
+
22
+ Google Tag Manager for WordPress builds a so called dataLayer variable for you. Using this you can manage your tags
23
+ very easily since you can fire them using rules that include
24
+
25
+ * post/page titles
26
+ * post/page dates
27
+ * post/page category names
28
+ * post/page tag names
29
+ * post/page author names
30
+ * post types
31
+ * logged in status
32
+ * logged in user role
33
+
34
+ = Tag Manager Events =
35
+
36
+ This plugin can fire several Tag Manager events so that you can include special tags when
37
+
38
+ * the visitor clicks on an outbound link
39
+ * the visitor clicks on a download link
40
+ * the visitor clicks on an email link
41
+
42
+ Link URLs are included in the Tag Manager event so that you can use them for example in a Google Analytics event tag.
43
+
44
+ = Google AdWords remarketing =
45
+
46
+ Google Tag Manager for WordPress can add every dataLayer variable as an AdWords remarketing custom parameter list.
47
+ Using this you can create more sophisticated remarketing lists.
48
+
49
+ = Integration =
50
+
51
+ Google Tag Manager for WordPress can integrate with several popular plugins.
52
+
53
+ * Contact Form 7: fire an event after a successful form submission
54
+ * WooCommerce:
55
+ * fire event when visitors ads a product to your cart
56
+ * include transaction data to be sent to Google/Universal Analytics
57
+ * include necessary remarketing tags for Google AdWords Dynamic Remarketing
58
+
59
+ More integration to come!
60
+
61
+ == Installation ==
62
+
63
+ 1. Upload `google-tag-manager-for-wordpress` to the `/wp-content/plugins/` directory
64
+ 1. Activate the plugin through the 'Plugins' menu in WordPress
65
+ 1. Go to Settings / Google Tag Manager and enter your Google Tag Manager container ID and setup additional options
66
+
67
+ == Frequently Asked Questions ==
68
+
69
+ = Can I exclude certain user roles from being tracked? =
70
+
71
+ Google Tag Manager is not just about visitor tracking.
72
+ The ability to include a Google/Universal Analytics tag is only one feature
73
+ you can manage.
74
+
75
+ Therefore there is no need to have an option to exclude the container code snippet
76
+ on certain cases.
77
+
78
+ If you want to exclude logged in users or certains user roles, use the corresponting dataLayer variable
79
+ and and exclude filter in Google Tag Manager.
80
+
81
+ == Screenshots ==
82
+
83
+ 1. Admin panel
84
+ 2. Basic settings
85
+ 3. Events
86
+ 4. Integration panel
87
+ 5. Advanced settings
88
+
89
+ == Changelog ==
90
+
91
+ = 0.1 =
92
+ * First beta release
93
+
94
+ == Upgrade Notice ==
95
+
96
+ This is the first public beta, no upgrade is needed.