'method_name', self::$position => array( 'function_to_add' => 'render_analytics', 'priority' => 999999, ), ); } /** * Plugin options settings. * * @var array */ private $options = null; private static $position = ''; /** * Init the constructor. * * @param array $argument Plugin options settings. */ function __construct( array $options = array() ) { $this->options = $options; self::$position = $this->options['google_analytics_position']; // add_filter( 'body_class', array( $this, 'render_tag_manager' ), 10000, 2 ); } // add_filter( 'body_class', 'render_tag_manager', 10000 ); /** * Google tag manager * @link http://www.tagmanageritalia.it/come-installare-google-tag-manager-tramite-wordpress/ * Filters the list of CSS body classes for the current post or page. * * @since 2.2.2 * * @param array $classes An array of body classes. * @param array $class An array of additional classes added to the body. */ public function render_tag_manager( $classes, $class ) { if ( is_preview() && is_admin() ) { return; } if ( empty( $this->options['google_tag_manager_id'] ) ) { return; } $snippet = sprintf( '', esc_js( $this->options['google_tag_manager_id'] ) ); $classes[] = sprintf( '">%s
$parameter ) { if ( empty( $parameter ) ) { continue; } if ( is_array( $parameter ) ) { $output .= json_encode( $parameter ); } else { $output .= sprintf( '"%s"%s', esc_js( $parameter ), $count_params - 1 === $i ? '' : ',' ); } $i++; } $output .= ');'; /** * This filters the output of the html attributes. * * @var string */ // $output = apply_filters( "italystrap_attr_{$context}_output", $output, $parameters, $context, $args ); return $output; } /** * Maybe anonimize IP * * @return string [description] */ public function maybe_anonimize_ip() { if ( empty( $this->options['google_analytics_anonymizeIp'] ) ) { return ''; } $parameters = array( 'command' => 'set', 'fields' => 'anonymizeIp', 'fields_object' => 'true', ); return $this->get_ga( $parameters ); } /** * Init ga * * @return string [description] */ public function ga_commands_queue() { $parameters = array( array( 'command' => 'create', 'fields' => esc_js( $this->options['google_analytics_id'] ), 'fields_object' => 'auto', ), array( 'command' => 'send', 'fields' => 'pageview', ), ); $parameters = apply_filters( 'italystrap_ga_commands_queue', $parameters, $this->options ); $output = ''; foreach ( $parameters as $array ) { $output .= $this->get_ga( $array ); } $output .= $this->maybe_anonimize_ip(); return apply_filters( 'italystrap_ga_commands_queue_output', $output, $this ); } /** * Standard analytics script * * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/ * * @param string $value [description] * @return string [description] */ public function standard_script( $get_ga ) { return sprintf( '', $get_ga ); } /** * The alternative async tracking snippet below adds support for preloading, * which will provide a small performance boost on modern browsers, * but can degrade to synchronous loading and execution on IE 9 and * older mobile browsers that do not recognize the async script attribute. * Only use this tracking snippet if your visitors primarily use * modern browsers to access your site. * * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/ * * @param string $value [description] * @return string [description] */ public function alternative_script( $get_ga ) { return sprintf( '', $get_ga ); } /** * Insert your ID in Option Theme admin panel * Print code only if value exist * * @todo google event tracking time * @link https://programma-affiliazione.amazon.it/gp/associates/promo/a20140921?rw_useCurrentProtocol=1 * * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/ * * @return string Return google analytics code */ public function render_analytics() { if ( is_preview() && is_admin() ) { return; } if ( empty( $this->options['google_analytics_id'] ) ) { return; } // $output = $this->alternative_script( $this->ga_commands_queue() ); $output = $this->standard_script( $this->ga_commands_queue() ); echo $output; // XSS ok. } }