Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions assets/js/event-providers/easy-digital-downloads.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@
],
} );
} );

if (
global._googlesitekit?.gtagUserData &&
global._googlesitekit?.edddata?.purchase?.user_data
) {
global._googlesitekit?.gtagEvent?.( 'purchase', {
user_data: global._googlesitekit.edddata.purchase.user_data,
} );
}
} )( global.jQuery );

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@

use Google\Site_Kit\Core\Assets\Script;
use Google\Site_Kit\Core\Conversion_Tracking\Conversion_Events_Provider;
use Google\Site_Kit\Core\Util\Feature_Flags;
use Google\Site_Kit\Core\Util\Method_Proxy_Trait;
use Google\Site_Kit\Modules\Ads\Enhanced_Conversions;

/**
* Class for handling Easy Digital Downloads conversion events.
Expand All @@ -22,6 +25,8 @@
*/
class Easy_Digital_Downloads extends Conversion_Events_Provider {

use Method_Proxy_Trait;

const CONVERSION_EVENT_PROVIDER_SLUG = 'easy-digital-downloads';

/**
Expand All @@ -43,7 +48,13 @@ public function is_active() {
* @return array List of event names.
*/
public function get_event_names() {
return array( 'add_to_cart' );
$event_names = array( 'add_to_cart' );

if ( Feature_Flags::enabled( 'gtagUserData' ) ) {
$event_names[] = 'purchase';
}

return $event_names;
}

/**
Expand All @@ -67,4 +78,141 @@ public function register_script() {

return $script;
}

/**
* Registers hooks for the Easy Digital Downloads provider.
*
* @since n.e.x.t
*/
public function register_hooks() {
if ( Feature_Flags::enabled( 'gtagUserData' ) ) {
add_action(
'wp_footer',
$this->get_method_proxy( 'maybe_add_purchase_data_from_session' )
);
}
}

/**
* Prints the purchase data.
*
* @since n.e.x.t
*/
protected function maybe_add_purchase_data_from_session() {
if ( ! function_exists( 'edd_get_purchase_session' ) || ! function_exists( 'edd_is_success_page' ) || ! edd_is_success_page() ) {
return;
}

$purchase_session = edd_get_purchase_session();
$purchase_data = $this->get_enhanced_conversions_data_from_session( $purchase_session );

wp_add_inline_script(
'googlesitekit-events-provider-' . self::CONVERSION_EVENT_PROVIDER_SLUG,
join(
"\n",
array(
'window._googlesitekit.edddata = window._googlesitekit.edddata || {};',
sprintf( 'window._googlesitekit.edddata.purchase = %s;', wp_json_encode( $purchase_data ) ),
)
),
'before'
);
}


/**
* Extracts Enhanced Conversions data from an EDD session.
*
* @since n.e.x.t
*
* @param mixed|array|null $session_data An array containing EDD purchase session data.
*
* @return array
*/
protected function get_enhanced_conversions_data_from_session( $session_data ) {
if ( ! is_array( $session_data ) ) {
return array();
}

$user_data = $this->extract_user_data_from_session( $session_data );

if ( empty( $user_data ) ) {
return array();
}

return array(
'user_data' => $user_data,
);
}


/**
* Extracts user data from an EDD session.
*
* @since n.e.x.t
*
* @param array $session_data An array containing EDD purchase session data.
*
* @return array
*/
protected function extract_user_data_from_session( $session_data ) {
$user_data = array();
$address_data = array();

if ( isset( $session_data['user_info'] ) ) {
$email = $session_data['user_info']['email'] ?? $session_data['user_email'] ?? '';

if ( ! empty( $email ) ) {
$user_data['email'] = Enhanced_Conversions::get_normalized_email( $email );
}

if ( ! empty( $session_data['user_info']['first_name'] ) ) {
$address_data['first_name'] = Enhanced_Conversions::get_normalized_value( $session_data['user_info']['first_name'] );
}

if ( ! empty( $session_data['user_info']['last_name'] ) ) {
$address_data['last_name'] = Enhanced_Conversions::get_normalized_value( $session_data['user_info']['last_name'] );
}

if ( isset( $session_data['user_info']['address'] ) ) {

if ( ! empty( $session_data['user_info']['address']['phone'] ) ) {
$user_data['phone_number'] = Enhanced_Conversions::get_normalized_value( $session_data['user_info']['address']['phone'] );
}

if ( ! empty( $session_data['user_info']['address']['line1'] ) ) {
$address_data['street'] = Enhanced_Conversions::get_normalized_value( $session_data['user_info']['address']['line1'] );
}

if ( ! empty( $session_data['user_info']['address']['city'] ) ) {
$address_data['city'] = Enhanced_Conversions::get_normalized_value( $session_data['user_info']['address']['city'] );
}

if ( ! empty( $session_data['user_info']['address']['state'] ) ) {
$region = $session_data['user_info']['address']['state'];

// Attempt to get full region name.
if ( function_exists( 'edd_get_state_name' ) && ! empty( $session_data['user_info']['address']['country'] ) ) {
$region = edd_get_state_name( $session_data['user_info']['address']['country'], $region );
}

$address_data['region'] = Enhanced_Conversions::get_normalized_value( $region );
}

if ( ! empty( $session_data['user_info']['address']['zip'] ) ) {
$address_data['postal_code'] = Enhanced_Conversions::get_normalized_value( $session_data['user_info']['address']['zip'] );
}

if ( ! empty( $session_data['user_info']['address']['country'] ) ) {
$address_data['country'] = $session_data['user_info']['address']['country'];
}
}
}

if ( ! empty( $address_data ) ) {
$user_data['address'] = $address_data;
}

return $user_data;
}
}
Loading
Loading