Setting a cookie in Wordpress functions.php - cant echo it using an other function

1.6k views Asked by At

My first function gets the parameters from the URL and sets the cookies:

Edit:

first function loads before everything on WP and saves the cookies and when checking the browsers cookies - it's there. it's saved.

/**
    Get variables from the URL and set them into the coockie
**/

add_action( 'init', 'set_utm_cookie');
function set_utm_cookie() {

    global $utm;

    if (getenv('HTTP_CLIENT_IP'))
        $utm['ip'] = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $utm['ip'] = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $utm['ip'] = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $utm['ip'] = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $utm['ip'] = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $utm['ip'] = getenv('REMOTE_ADDR');
    else
        $utm['ip'] = 'UNKNOWN';

    $utm = array(
        'utm_source'   => htmlspecialchars( $_GET["utm_source"]),
        'utm_medium'   => htmlspecialchars( $_GET["utm_medium"]),
        'utm_term'     => htmlspecialchars( $_GET["utm_term"]),
        'utm_content'  => htmlspecialchars( $_GET["utm_content"]),
        'utm_campaign' => htmlspecialchars( $_GET["utm_content"]), 
        'ip'           => $utm['ip']
    );


if ( !isset($_COOKIE['utm_source']) ) {
    setcookie('utm_source',   $utm['utm_source'],   time()+3600*60*24*7); 
}


if ( !isset($_COOKIE['utm_medium']) ) {
    setcookie('utm_medium',   $utm['utm_medium'],   time()+3600*60*24*7);
}

if ( !isset($_COOKIE['utm_term']) ) {   
    setcookie('utm_term',     $utm['utm_term'],     time()+3600*60*24*7);
}

if ( !isset($_COOKIE['utm_content']) ) {
    setcookie('utm_content',  $utm['utm_content'],  time()+3600*60*24*7);
}

if ( !isset($_COOKIE['utm_campaign']) ) {
    setcookie('utm_campaign', $utm['utm_campaign'], time()+3600*60*24*7);
}

if ( !isset($_COOKIE['ip']) ) {
    setcookie('ip',           $utm['ip'],           time()+3600*60*24*7);
}



}

the second function is activated using ajax Whenever a user submits a contact form - It sends the inputs to this function and sends the email. if the email is sent (using wp_mail function - it sends the same email but with what I saved in the cookie. )

when I get the email - the fields of the coolie output is blank :X except of the IP. I get the IP.

/**
    Contact form using Ajax 
**/ 

add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 

// Send information from the contact form 
function submit_contact_form(){

    // Get the UTM variables from the 'get_the_utm_vars()' function
    //$utm = get_the_utm_vars();

    // If there is a $_POST['email']...
    if( isset($_POST['email']) && ($_POST['validation'] == true ) ) {

        // Get parameters
        $email = $_POST['email']; // Gets the email of the user..
        $email_to = "[email protected]";
        $walid = '[email protected]';
        $fullname = $_POST['fullname'];
        $message = $_POST['text']; 
        $email_subject = "yellowHEAD Intro: $email";        
        $headers = array(
                'From: '. $fullname .' <'. $email .'>', 
                'BCC:  [email protected]', 
                'BCC:  [email protected]', 
                'BCC:  [email protected]', 
                'BCC:  [email protected]', 
                'BCC:  [email protected]', 
                'Content-type: text/html; charset=\"UTF-8\"; format=flowed \r\n'
            ); 

        // Send email to YH, and if sent - do:
        if ( wp_mail($email_to,$email_subject,$message,$headers) ) {

            // Tells me that the mail has been sent
            echo json_encode( array("result"=>"complete") );


            //Add the UTM variables to the emails text
            $message .= "\r\n \r\n \r\n UTM Campaign: ".$_COOKIE['utm_campaign']." \r\n UTM Medium: ".$_COOKIE['utm_medium']." \r\n UTM Term: ".$_COOKIE['utm_term'] ."\r\n UTM Content: ".$_COOKIE['utm_content']." \r\n UTM Campaign: ".$_COOKIE['utm_campaign']." ";


            // A mail for tova with the UTM paramseters
            wp_mail($walid,$email_subject,$message);

            // An automail for the user 
            //$message_responce = "Hi $fullname, \r\n Thanks for reaching out to us with your inquiry. We have received your e-mail and somebody from yellowHEAD will respond to you within one working day. \r\n In the meantime, feel free to connect with us through our Facebook or LinkedIn or to check out our professional blog. \r\n \r\n Talk to you soon. \r\n - The yellowHEAD Team";
            //$header_responce = 'From: yellowHEADinc.com Team <[email protected]>';
            //wp_mail($email,'yellowHEAD - Thanks For Your E-mail',$message_responce,$header_responce );

        } else {
            echo json_encode(array("result"=>"mail_error"));
            var_dump($GLOBALS['phpmailer']->ErrorInfo);
    }
        wp_die();
    }

}

How do I echo these cookies right? I'm almost sure there is something basic I don't know that will solve everything :X

https://i.stack.imgur.com/ey6TH.png enter image description here

1

There are 1 answers

1
Hakem On BEST ANSWER

Try adding cookie path and cookie domain

setcookie('utm_campaign',$utm['utm_campaign'] , time()+3600*24*100, COOKIEPATH, COOKIE_DOMAIN, false);