Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/modules/utm/class-bwfan-utm-tracking.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

103 lines
3.0 KiB
PHP
Executable File

<?php
#[AllowDynamicProperties]
class BWFAN_UTM_Tracking {
private static $ins = null;
private $utm_parameters = [];
public function __construct() {
add_filter( 'bwfan_before_send_email_body', [ $this, 'maybe_add_utm_parameters' ], 10, 2 );
}
public static function get_instance() {
if ( is_null( self::$ins ) ) {
self::$ins = new self();
}
return self::$ins;
}
public function maybe_add_utm_parameters( $body, $data, $mode = 'email' ) {
/** Check for UTM parameters */
if ( ! isset( $data['append_utm'] ) || 1 !== absint( $data['append_utm'] ) ) {
return $body;
}
if ( isset( $data['utm_source'] ) && ! empty( $data['utm_source'] ) ) {
$this->utm_parameters['utm_source'] = $this->get_prepared_utm( $data['utm_source'] );
}
if ( isset( $data['utm_medium'] ) && ! empty( $data['utm_medium'] ) ) {
$this->utm_parameters['utm_medium'] = $this->get_prepared_utm( $data['utm_medium'] );
}
if ( isset( $data['utm_name'] ) && ! empty( $data['utm_name'] ) ) {
$this->utm_parameters['utm_campaign'] = $this->get_prepared_utm( $data['utm_name'] );
}
if ( isset( $data['utm_term'] ) && ! empty( $data['utm_term'] ) ) {
$this->utm_parameters['utm_term'] = $this->get_prepared_utm( $data['utm_term'] );
}
if ( isset( $data['utm_content'] ) && ! empty( $data['utm_content'] ) ) {
$this->utm_parameters['utm_content'] = $this->get_prepared_utm( $data['utm_content'] );
}
$this->utm_parameters = apply_filters( 'bwfan_utm_parameters', $this->utm_parameters, $data );
$regex_pattern = BWFAN_PRO_Common::get_regex_pattern( 'email' !== $mode ? 3 : 1 );
return preg_replace_callback( $regex_pattern, function ( $matches ) use ( $mode ) {
/** According to Href (1) regex, URL is at 1 index. And for Link (3) Regex, 0 index. */
$url = 'email' !== $mode ? $matches[0] : $matches[1];
/** Check url needs to exclude from click track */
if ( BWFAN_PRO_Common::is_exclude_url( $url ) ) {
return $matches[0];
}
$url = $this->append_tracking_click_utm_parameters( $url );
/** In case of Href regex, replace old URL with new one in 'HREF' string, otherwise return */
return 'email' !== $mode ? $url : str_replace( $matches[1], $url, $matches[0] );
}, $body );
}
public function append_tracking_click_utm_parameters( $string ) {
if ( empty( $string ) ) {
return '';
}
/** Check url needs to exclude */
if ( BWFAN_PRO_Common::is_exclude_url( $string ) ) {
return $string;
}
/** In case of unsubscribe link, don't append */
if ( strstr( $string, 'bwfan-action=unsubscribe' ) ) {
return $string;
}
/** In case of email open url, don't append */
if ( strstr( $string, 'bwfan-track-action=open' ) ) {
return $string;
}
return add_query_arg( $this->utm_parameters, $string );
}
/**
* Remove space and replace with '+' from string
*
* @param $utm
*
* @return array|string|string[]
*/
public function get_prepared_utm( $utm ) {
return str_replace( " ", "+", trim( $utm ) );
}
}
BWFAN_UTM_Tracking::get_instance();