Need the hook in identify_by_email function
-
I want to modify the initial subscription status of the email when some one visits the site, And i don’t see any hook for the same. For example when some one visits the website and add an email just adding the email not doing any click or anything it fires the ajax call which adds the user to the audience list in omnisend – https://prnt.sc/XalFvjDdYKkB
After digging in the code found that it coming from this code
<?php
/**
* Omnisend AJAX Functions
*
* @package OmnisendPlugin
*/
defined( 'ABSPATH' ) || exit;
add_action( 'wp_ajax_omnisend_identify', 'omnisend_hook_omnisend_ajax_save_email' );
add_action( 'wp_ajax_nopriv_omnisend_identify', 'omnisend_hook_omnisend_ajax_save_email' );
function omnisend_hook_omnisend_ajax_save_email() {
check_ajax_referer( 'omnisend-front-script-nonce' );
Omnisend_Logger::hook();
$email = ! empty( $_GET['email'] ) ? sanitize_email( wp_unslash( $_GET['email'] ) ) : '';
$contact_id = ! empty( $_GET['contact_id'] ) ? sanitize_text_field( wp_unslash( $_GET['contact_id'] ) ) : '';
Omnisend_Logger::debug( "omnisend_hook_omnisend_ajax_save_email - received email: $email, contact_id: $contact_id" );
Omnisend_Ajax::identify_by_email( $email, $contact_id );
exit;
}
add_action( 'wp_ajax_omnisend_track_started_checkout_event', 'omnisend_track_started_checkout_event' );
add_action( 'wp_ajax_nopriv_omnisend_track_started_checkout_event', 'omnisend_track_started_checkout_event' );
function omnisend_track_started_checkout_event() {
check_ajax_referer( 'omnisend-checkout-script-nonce' );
Omnisend_Logger::hook();
$email = ! empty( $_GET['email'] ) ? sanitize_email( wp_unslash( $_GET['email'] ) ) : '';
Omnisend_Logger::debug( "omnisend_track_started_checkout_event - received email: $email" );
Omnisend_Cart_Event::started_checkout( $email, gmdate( DATE_ATOM, time() ) );
exit;
}
add_action( 'wp_ajax_omnisend_update_plugin_setting', 'omnisend_update_plugin_setting' );
function omnisend_update_plugin_setting() {
check_ajax_referer( 'omnisend-settings-script-nonce' );
Omnisend_Logger::hook();
$setting_name = isset( $_POST['setting_name'] ) ? sanitize_text_field( wp_unslash( $_POST['setting_name'] ) ) : '';
$setting_value = isset( $_POST['setting_value'] ) ? sanitize_text_field( wp_unslash( $_POST['setting_value'] ) ) : '';
Omnisend_Logger::info( "omnisend_update_plugin_setting - received setting_name: $setting_name, setting_value: $setting_value" );
$setting_update_source = 'admin';
switch ( $setting_name ) {
case 'contact_tag':
Omnisend_Settings::set_contact_tag( $setting_value, $setting_update_source );
break;
case 'contact_tag_status':
Omnisend_Settings::set_contact_tag_status( $setting_value, $setting_update_source );
break;
case 'checkout_opt_in_status':
Omnisend_Settings::set_checkout_opt_in_status( $setting_value, $setting_update_source );
break;
case 'checkout_opt_in_text':
Omnisend_Settings::set_checkout_opt_in_text( $setting_value, $setting_update_source );
break;
case 'checkout_opt_in_preselected_status':
Omnisend_Settings::set_checkout_opt_in_preselected_status( $setting_value, $setting_update_source );
break;
default:
break;
}
exit;
}
class Omnisend_Ajax {
/**
* @return Omnisend_Operation_Status
*/
public static function identify_by_email( $email, $contact_id ) {
if ( ! Omnisend_Manager::is_setup() ) {
return Omnisend_Operation_Status::error( 'Omnisend is not setup' );
}
if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
return Omnisend_Operation_Status::error( 'Incorrect request (email)' );
}
if ( Omnisend_Contact_Resolver::update_by_email( $email ) ) {
return Omnisend_Operation_Status::success();
}
$api_url = OMNISEND_API_URL . '/v3/contacts';
$curl_result = Omnisend_Helper::omnisend_api( $api_url, 'POST', self::generate_contact_payload( $email, $contact_id ) );
if ( $curl_result['code'] < 200 || $curl_result['code'] >= 300 ) {
Omnisend_Logger::log( 'warn', 'contacts', $api_url, 'Unable to push contact ' . $email . ' to Omnisend.' . $curl_result['response'] );
return Omnisend_Operation_Status::error( 'Unable to create contact (api error)' );
}
Omnisend_Logger::log( 'info', 'contacts', $api_url, 'Contact ' . $email . ' was successfully pushed to Omnisend.' );
$response = json_decode( $curl_result['response'], true );
if ( empty( $response['contactID'] ) ) {
Omnisend_Logger::log( 'warn', 'contacts', $api_url, 'Unable to push contact ' . $email . ' to Omnisend. Unexpected API response: ' . $curl_result['response'] );
return Omnisend_Operation_Status::error( 'Unable to identify contact (api error)' );
}
Omnisend_Contact_Resolver::update_by_email_and_contact_id( $email, $response['contactID'] );
return Omnisend_Operation_Status::success();
}
private static function generate_contact_payload( $email, $contact_id ) {
$tags = array( 'source: woocommerce' );
$tag = Omnisend_Settings::get_contact_tag_value();
if ( $tag ) {
$tags[] = $tag;
}
$payload = array(
'email' => $email,
'status' => 'nonSubscribed',
'statusDate' => gmdate( DATE_ATOM ),
'tags' => $tags,
);
if ( $contact_id ) {
$payload['contactID'] = $contact_id;
}
return $payload;
}
}So i want to change the “status” when the this happened and tags as well but i don’t see any hook to do so in generate_contact_payload function.
The page I need help with: [log in to see the link]
- You must be logged in to reply to this topic.