| 1 |
<?php |
| 2 |
/** |
| 3 |
* Plugin Name: Wp Tracking Codes |
| 4 |
* Plugin URI: https://wordpress.org/plugins/wp-tracking-codes/ |
| 5 |
* Description: The tracking codes in one place. Support: GTM, GA4 Global Tag, ADS Remarketing Global Tag, Google Merchant Customer Reviews for WooCommerce, Facebook. |
| 6 |
* Version: 1.10.0 |
| 7 |
* Requires at least: 5.2.0 |
| 8 |
* Tested up to: 7.0 |
| 9 |
* Requires PHP: 7.4 |
| 10 |
* Author: Array.codes |
| 11 |
* Author URI: https://array.codes |
| 12 |
* Developer: Heitor Sousa |
| 13 |
* Developer URI: https://array.codes/ |
| 14 |
* Domain Path: /languages |
| 15 |
* Text Domain: wp-tracking-codes |
| 16 |
* |
| 17 |
* WC requires at least: 4.8.0 |
| 18 |
* WC tested up to: 10.9.0 |
| 19 |
* |
| 20 |
* License: GPLv2 or later |
| 21 |
* License URI: http://www.gnu.org/licenses/gpl-2.0.html |
| 22 |
* |
| 23 |
*/ |
| 24 |
if(!defined('ABSPATH')){ |
| 25 |
exit; |
| 26 |
} |
| 27 |
|
| 28 |
if(!class_exists('Wp_Tracking_Codes')): |
| 29 |
class Wp_Tracking_Codes { |
| 30 |
/** |
| 31 |
* Plugin version. |
| 32 |
* |
| 33 |
* @var string |
| 34 |
*/ |
| 35 |
const VERSION = '1.10.0'; |
| 36 |
/** |
| 37 |
* Instance of this class. |
| 38 |
* |
| 39 |
* @var object |
| 40 |
*/ |
| 41 |
protected static $instance = null; |
| 42 |
/** |
| 43 |
* Options |
| 44 |
* |
| 45 |
* @var array $options Options |
| 46 |
*/ |
| 47 |
private $options = array(); |
| 48 |
/** |
| 49 |
* Initialize the plugin public actions. |
| 50 |
*/ |
| 51 |
private function __construct() { |
| 52 |
// Load the instalation hook |
| 53 |
register_activation_hook( __FILE__, 'wp_tracking_codes_install' ); |
| 54 |
// Load plugin text domain. |
| 55 |
add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); |
| 56 |
//Load includes |
| 57 |
$this->includes(); |
| 58 |
//Load Tracking Analytics |
| 59 |
add_action( 'wp_head', array( $this, 'hook_analytics_4' ) ); |
| 60 |
//Load Tracking Analytics Remarketing |
| 61 |
add_action( 'wp_footer', array( $this, 'hook_analytics_remarketing' ) ); |
| 62 |
//Load Tracking Facebook ID |
| 63 |
add_action( 'wp_head', array( $this, 'hook_facebook_pixel_code' ) ); |
| 64 |
//Load Tracking Google Tag Manager in Head and after Body |
| 65 |
add_action('wp_head', array($this, 'hook_google_tag_manager_head')); |
| 66 |
add_filter('wp_body_open', array( $this, 'hook_google_tag_manager_body' ),0); |
| 67 |
add_action( 'before_woocommerce_init', array( $this, 'declare_compatibility_hpos') ); |
| 68 |
} |
| 69 |
/** |
| 70 |
* Return an instance of this class. |
| 71 |
* |
| 72 |
* @return object A single instance of this class. |
| 73 |
*/ |
| 74 |
public static function get_instance() { |
| 75 |
// If the single instance hasn't been set, set it now. |
| 76 |
if ( null == self::$instance ) { |
| 77 |
self::$instance = new self; |
| 78 |
} |
| 79 |
|
| 80 |
return self::$instance; |
| 81 |
} |
| 82 |
|
| 83 |
/** |
| 84 |
* Get templates path. |
| 85 |
* |
| 86 |
* @return string |
| 87 |
*/ |
| 88 |
public static function get_templates_path() { |
| 89 |
return plugin_dir_path( __FILE__ ) . 'templates/'; |
| 90 |
} |
| 91 |
|
| 92 |
/** |
| 93 |
* Load the plugin text domain for translation. |
| 94 |
*/ |
| 95 |
public function load_plugin_textdomain() { |
| 96 |
load_plugin_textdomain( 'wp-tracking-codes', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); |
| 97 |
} |
| 98 |
|
| 99 |
/** |
| 100 |
* Instalation Plugin |
| 101 |
*/ |
| 102 |
public function wp_tracking_codes_install() { |
| 103 |
// Trigger our function that registers the custom post type |
| 104 |
pluginprefix_setup_post_types(); |
| 105 |
// Clear the permalinks after the post type has been registered |
| 106 |
flush_rewrite_rules(); |
| 107 |
} |
| 108 |
/** |
| 109 |
* Includes |
| 110 |
*/ |
| 111 |
private function includes() { |
| 112 |
include_once 'includes/class-register-codes.php'; |
| 113 |
include_once 'includes/class-render-google-merchant.php'; |
| 114 |
} |
| 115 |
|
| 116 |
public function hook_analytics_4(){ |
| 117 |
$this->options = get_option( 'tracking_option' ); |
| 118 |
if( isset( $this->options['analytics_4'] ) && !empty( $this->options['analytics_4'] ) ){ |
| 119 |
$analytics_4 = $this->options['analytics_4']; |
| 120 |
printf(" |
| 121 |
<!-- Global site tag (gtag.js) - Google Analytics --> |
| 122 |
<script async src='https://www.googletagmanager.com/gtag/js?id=%s'></script> |
| 123 |
<script> |
| 124 |
window.dataLayer = window.dataLayer || []; |
| 125 |
function gtag(){dataLayer.push(arguments);} |
| 126 |
gtag('js', new Date()); |
| 127 |
|
| 128 |
gtag('config', '%s'); |
| 129 |
</script> |
| 130 |
", esc_attr($analytics_4), esc_attr($analytics_4)); |
| 131 |
} |
| 132 |
|
| 133 |
} |
| 134 |
|
| 135 |
public function hook_analytics_remarketing() { |
| 136 |
$this->options = get_option( 'tracking_option' ); |
| 137 |
if( isset( $this->options['analytics_remarketing'] ) && !empty( $this->options['analytics_remarketing'] ) ){ |
| 138 |
$analytics_remarketing = $this->options['analytics_remarketing']; |
| 139 |
printf(" |
| 140 |
<!-- Global site tag (gtag.js) - Google Ads --> |
| 141 |
<script async src='https://www.googletagmanager.com/gtag/js?id=%s'></script> |
| 142 |
<script> |
| 143 |
window.dataLayer = window.dataLayer || []; |
| 144 |
function gtag(){dataLayer.push(arguments);} |
| 145 |
gtag('js', new Date()); |
| 146 |
|
| 147 |
gtag('config', '%s'); |
| 148 |
</script> |
| 149 |
", esc_attr($analytics_remarketing), esc_attr($analytics_remarketing)); |
| 150 |
} |
| 151 |
} |
| 152 |
|
| 153 |
public function hook_facebook_pixel_code() { |
| 154 |
$this->options = get_option( 'tracking_option' ); |
| 155 |
if ( isset( $this->options['facebook_pixel_code'] ) && ! empty( $this->options['facebook_pixel_code'] ) ){ |
| 156 |
$facebook_pixel_code = $this->options['facebook_pixel_code']; |
| 157 |
printf( " |
| 158 |
<!-- Facebook Pixel Code --> |
| 159 |
<script> |
| 160 |
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? |
| 161 |
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; |
| 162 |
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; |
| 163 |
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, |
| 164 |
document,'script','https://connect.facebook.net/en_US/fbevents.js'); |
| 165 |
|
| 166 |
fbq('init', '%1\$s'); |
| 167 |
fbq('track', 'PageView');</script> |
| 168 |
<noscript><img height='1' width='1' style='display:none' |
| 169 |
src='https://www.facebook.com/tr?id=%1\$s&ev=PageView&noscript=1' |
| 170 |
/></noscript> |
| 171 |
<!-- End Facebook Pixel Code --> |
| 172 |
", esc_attr($facebook_pixel_code) ); |
| 173 |
} |
| 174 |
} |
| 175 |
|
| 176 |
public function hook_google_tag_manager_head(){ |
| 177 |
$this->options = get_option('tracking_option'); |
| 178 |
if ( isset( $this->options['google_tag_manager'] ) && !empty($this->options['google_tag_manager'])){ |
| 179 |
$google_tag_manager = $this->options['google_tag_manager']; |
| 180 |
printf( |
| 181 |
"<!-- Google Tag Manager --> |
| 182 |
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': |
| 183 |
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], |
| 184 |
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= |
| 185 |
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); |
| 186 |
})(window,document,'script','dataLayer','%s');</script> |
| 187 |
<!-- End Google Tag Manager -->", |
| 188 |
esc_attr( $google_tag_manager ) |
| 189 |
); |
| 190 |
} |
| 191 |
|
| 192 |
} |
| 193 |
|
| 194 |
public function hook_google_tag_manager_body($classes){ |
| 195 |
$this->options = get_option( 'tracking_option' ); |
| 196 |
if( isset( $this->options['google_tag_manager'] ) && !empty( $this->options['google_tag_manager'] ) ){ |
| 197 |
$google_tag_manager = $this->options['google_tag_manager']; |
| 198 |
printf("<!-- Google Tag Manager (noscript) --> |
| 199 |
<noscript><iframe src='https://www.googletagmanager.com/ns.html?id=%s' height='0' width='0' style='display:none;visibility:hidden'></iframe></noscript> |
| 200 |
<!-- End Google Tag Manager (noscript) -->", |
| 201 |
esc_attr( $google_tag_manager ) |
| 202 |
); |
| 203 |
} |
| 204 |
} |
| 205 |
|
| 206 |
/** |
| 207 |
* Declare_compatibility_hpos |
| 208 |
*/ |
| 209 |
public function declare_compatibility_hpos() { |
| 210 |
if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { |
| 211 |
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', 'wp-tracking-codes/wp-tracking-codes.php', true ); |
| 212 |
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', 'wp-tracking-codes/wp-tracking-codes.php', true ); |
| 213 |
} |
| 214 |
} |
| 215 |
} |
| 216 |
add_action( 'plugins_loaded', array( 'Wp_Tracking_Codes', 'get_instance' ) ); |
| 217 |
endif; |