Files
2026-04-28 15:13:50 +02:00

324 lines
11 KiB
PHP

<?php
/**
* Get Tracking ID.
*
* @param string $args
*
* @return string $selected_data_ua
*
* @since 3.0
*/
function aet_get_tracking_id( $args ) {
$selected_data_ua = get_option( 'selected_data_ua_' . $args );
return $selected_data_ua;
}
/**
* Get option.
*
* @param string $args
*
* @return string $get_option_data
*
* @since 3.0
*/
function aet_get_setting_option( $args ) {
$option_key = 'aet_' . $args . '_tracking_settings';
$get_option_data = json_decode( get_option( $option_key ) );
return $get_option_data;
}
/**
* Check user role is log-in or not for tracking.
*
* @param string $args
*
* @return bool $track_user
*
* @since 3.0
*/
function aet_tracking_user( $args ) {
$user = wp_get_current_user();
$track_user = true;
if ( is_multisite() && is_super_admin() ) {
$track_user = false;
}
return apply_filters( 'aet_tracking_user', $track_user, $user );
}
/**
* Check enhance ecommerce is enable or not.
*
* @param string $args
*
* @return string $enhance_ecommerce_tracking
*
* @since 3.0
*/
function aet_get_aet_4_tracking_data( $args ) {
$aet_et_tracking_settings = aet_get_setting_option( $args );
$manually_et_px_ver_4 = ( empty( $aet_et_tracking_settings->manually_et_px_ver_4 ) ? '' : $aet_et_tracking_settings->manually_et_px_ver_4 );
return $manually_et_px_ver_4;
}
/**
* Check enhance ecommerce is enable or not.
*
* @param string $args
*
* @return string $enhance_ecommerce_tracking
*
* @since 3.0
*/
function aet_check_enhance_ecommerce_enable( $args ) {
$aet_et_tracking_settings = aet_get_setting_option( $args );
$enhance_ecommerce_tracking = ( empty( $aet_et_tracking_settings->enhance_ecommerce_tracking ) ? '' : $aet_et_tracking_settings->enhance_ecommerce_tracking );
return $enhance_ecommerce_tracking;
}
/**
* Check IP anonymization is enable or not.
*
* @param string $args
*
* @return string $ip_anonymization
*
* @since 3.0
*/
function aet_check_ip_anonymization( $args ) {
$aet_et_tracking_settings = aet_get_setting_option( $args );
$ip_anonymization = ( empty( $aet_et_tracking_settings->ip_anonymization ) ? '' : $aet_et_tracking_settings->ip_anonymization );
return $ip_anonymization;
}
/**
* Check google analytics opt out enable or not.
*
* @param string $args
*
* @return string $google_analytics_opt_out
*
* @since 3.0
*/
function aet_check_google_analytics_opt_out( $args ) {
$aet_et_tracking_settings = aet_get_setting_option( $args );
$google_analytics_opt_out = ( empty( $aet_et_tracking_settings->google_analytics_opt_out ) ? '' : $aet_et_tracking_settings->google_analytics_opt_out );
return $google_analytics_opt_out;
}
/**
* Get all analytics tracking data.
*
* @param string $args
*
* @return array $pass_aet_array
*
* @since 3.0
*/
function aet_get_all_aet_tracking_data( $args ) {
$pass_aet_array = array();
$enhance_ecommerce_tracking = aet_check_enhance_ecommerce_enable( $args );
$pass_aet_array['enhance_ecommerce_tracking'] = $enhance_ecommerce_tracking;
$ip_anonymization = aet_check_ip_anonymization( $args );
$pass_aet_array['ip_anonymization'] = $ip_anonymization;
$google_analytics_opt_out = aet_check_google_analytics_opt_out( $args );
$pass_aet_array['google_analytics_opt_out'] = $google_analytics_opt_out;
return $pass_aet_array;
}
/**
* Get purchase tracking data for an order.
* Used by frontend thank you page and admin order tracking for manual orders.
*
* @param int $order_id Order ID.
* @return array|false Array of tracking data or false if order invalid.
* @since 3.0
*/
function aet_get_purchase_tracking_data( $order_id ) {
if ( !function_exists( 'wc_get_order' ) || !function_exists( 'wc_format_decimal' ) ) {
return false;
}
$order = wc_get_order( $order_id );
if ( !$order || !is_a( $order, 'WC_Order' ) ) {
return false;
}
global $woocommerce;
$woo_version = ( isset( $woocommerce->version ) && !empty( $woocommerce->version ) ? $woocommerce->version : '3.0' );
$payment_method = $order->get_payment_method();
$coupons_list = '';
if ( version_compare( $woo_version, '3.7', '>' ) ) {
$codes = $order->get_coupon_codes();
if ( !empty( $codes ) ) {
$coupons_list = ( is_array( $codes ) ? implode( ', ', $codes ) : (string) $codes );
}
} else {
$codes = $order->get_coupon_codes();
if ( !empty( $codes ) ) {
$coupons_list = ( is_array( $codes ) ? implode( ', ', $codes ) : (string) $codes );
}
}
$currency = get_woocommerce_currency();
$orderpage_prod = '';
$items = $order->get_items();
if ( !empty( $items ) ) {
foreach ( $items as $item ) {
$_product = ( is_callable( array($item, 'get_product') ) ? $item->get_product() : null );
if ( !$_product || !is_a( $_product, 'WC_Product' ) ) {
continue;
}
$product_id = ( version_compare( $woo_version, '2.7', '<' ) && isset( $_product->ID ) ? $_product->ID : $_product->get_id() );
$categories = get_the_terms( $product_id, 'product_cat' );
$allcategories = '';
if ( !empty( $categories ) && !is_wp_error( $categories ) ) {
$cat_count = 2;
$loop_count = 1;
foreach ( $categories as $term ) {
if ( 1 === $loop_count ) {
$allcategories .= 'item_category: "' . esc_js( $term->name ) . '",';
} else {
$allcategories .= 'item_category' . $cat_count . ': "' . esc_js( $term->name ) . '",';
$cat_count++;
}
$loop_count++;
}
}
$discount = 0;
$regular = $_product->get_regular_price();
$sale = $_product->get_sale_price();
if ( !empty( $regular ) && !empty( $sale ) ) {
$decimals = ( function_exists( 'wc_get_price_decimals' ) ? wc_get_price_decimals() : 2 );
$discount = wc_format_decimal( (float) $regular - (float) $sale, $decimals );
}
$qty = 1;
if ( is_array( $item ) && isset( $item['qty'] ) ) {
$qty = $item['qty'];
} elseif ( is_callable( array($item, 'get_quantity') ) ) {
$qty = $item->get_quantity();
}
$qty_js = ( empty( $qty ) || '' === $qty ? '""' : esc_js( $qty ) );
$sku = $_product->get_sku();
$sku = ( !empty( $sku ) ? $sku : 'SKU_' . $product_id );
$item_brand = apply_filters( 'aet_item_brand', '' );
$brand_property = ( !empty( $item_brand ) ? 'item_brand: "' . esc_js( $item_brand ) . '",' : '' );
$item_total = ( is_callable( array($order, 'get_item_total') ) ? $order->get_item_total( $item ) : 0 );
$orderpage_prod .= '{
item_id: "' . esc_js( $sku ) . '",
item_name: "' . html_entity_decode( addslashes( $_product->get_name() ) ) . '",
' . $brand_property . '
coupon: "' . esc_js( $coupons_list ) . '",
currency: "' . esc_js( $currency ) . '",
discount: ' . esc_js( $discount ) . ',
price: ' . esc_js( $item_total ) . ',
' . $allcategories . '
quantity: ' . $qty_js . '
},';
}
$orderpage_prod = rtrim( $orderpage_prod, ',' );
}
return array(
'currency' => $currency,
'transaction_id' => $order->get_order_number(),
'value' => $order->get_total(),
'coupons_list' => $coupons_list,
'shipping' => $order->get_shipping_total(),
'tax' => $order->get_total_tax(),
'payment_method' => $payment_method,
'items_json' => $orderpage_prod,
);
}
/**
* Set transient to fire sign_in event on next frontend page load.
* Only when sign_in_tracking is enabled and premium code is allowed.
*
* @param string $user_login Username.
* @param WP_User $user User object.
*
* @since 3.0
*/
function aet_track_sign_in_set_transient( $user_login, $user ) {
if ( !function_exists( 'aet_fs' ) || !aet_fs()->is__premium_only() || !aet_fs()->can_use_premium_code() ) {
return;
}
$settings = json_decode( (string) get_option( 'aet_et_tracking_settings', '{}' ), true );
if ( empty( $settings['sign_in_tracking'] ) || 'on' !== $settings['sign_in_tracking'] ) {
return;
}
set_transient( 'aet_ga4_track_sign_in', 1, 60 );
}
/**
* Set transient to fire sign_out event on next frontend page load.
* Only when sign_out_tracking is enabled and premium code is allowed.
*
* @since 3.0
*/
function aet_track_sign_out_set_transient() {
if ( !function_exists( 'aet_fs' ) || !aet_fs()->is__premium_only() || !aet_fs()->can_use_premium_code() ) {
return;
}
$settings = json_decode( (string) get_option( 'aet_et_tracking_settings', '{}' ), true );
if ( empty( $settings['sign_out_tracking'] ) || 'on' !== $settings['sign_out_tracking'] ) {
return;
}
set_transient( 'aet_ga4_track_sign_out', 1, 60 );
}
/**
* Set transient to fire sign_up event on next frontend page load.
* Only when sign_up_tracking is enabled and premium code is allowed.
*
* @param int $user_id User ID.
*
* @since 3.0
*/
function aet_track_sign_up_set_transient( $user_id ) {
if ( !function_exists( 'aet_fs' ) || !aet_fs()->is__premium_only() || !aet_fs()->can_use_premium_code() ) {
return;
}
$settings = json_decode( (string) get_option( 'aet_et_tracking_settings', '{}' ), true );
if ( empty( $settings['sign_up_tracking'] ) || 'on' !== $settings['sign_up_tracking'] ) {
return;
}
set_transient( 'aet_ga4_track_sign_up', 1, 60 );
}
/**
* Queue refund data to send refund event on next frontend page load.
* Part of Enhanced Ecommerce; runs when order is fully refunded (no separate setting).
*
* @param int $order_id Order ID.
* @param int $refund_id Refund ID (optional, WC 2.2+).
*
* @since 3.0
*/
function aet_track_refund_queue( $order_id, $refund_id = 0 ) {
if ( !function_exists( 'aet_fs' ) || !aet_fs()->is__premium_only() || !aet_fs()->can_use_premium_code() ) {
return;
}
if ( !function_exists( 'wc_get_order' ) ) {
return;
}
$order = wc_get_order( $order_id );
if ( !$order || !is_a( $order, 'WC_Order' ) ) {
return;
}
$total_refunded = $order->get_total_refunded();
$currency = $order->get_currency();
$transaction_id = $order->get_order_number();
if ( empty( $transaction_id ) ) {
$transaction_id = (string) $order_id;
}
$pending = get_option( 'aet_ga4_pending_refunds', array() );
if ( !is_array( $pending ) ) {
$pending = array();
}
$pending[] = array(
'transaction_id' => $transaction_id,
'value' => (float) $total_refunded,
'currency' => $currency,
);
update_option( 'aet_ga4_pending_refunds', $pending );
}