Home > OS >  WooCommerce WC()->session->set not working
WooCommerce WC()->session->set not working

Time:08-18

I want to add some of the fields from a form into custom fields on a product so I can use them into an API call after payment is made. I have a redirection on my form that gets to the checkout page and add the product in the basket, code below:

<script>
document.addEventListener( 'wpcf7mailsent', function( event ) {
    if (jQuery("input[type='checkbox'][name='try[]']").is(':checked')) {
        location = 'http://www.thelittlegym.co.za/checkout/?add-to-cart=2506';
    } 
}, false );
</script>

Then, I have some code in my function.php to save the form data in the WC session. I had to add declare the new session otherwise the set function didn't work. If I do the init then I get an error saying "wc_empty_cart();" isn't defined (this function is from the WooCommerce plugin.

add_action('wpcf7_before_send_mail', 'send_form_data_to_wc_session', 5, 1);
function send_form_data_to_wc_session($contact_form) {
    $submission = WPCF7_Submission::get_instance();
    if($submission) {
        $posted_data = $submission->get_posted_data();
        if (!empty($posted_data['try'][0])) {
            // Set data to WooCommerce session
            WC()->session = new WC_Session_Handler();
            // WC()->session->init();
            WC()->session->set('cf7_posted_data', $posted_data);
        }
    }
}

Finally, I'm trying to retrieve the session data with the code below. The var dump just returns NULL.

add_action('woocommerce_checkout_before_customer_details', 'wc_save_cf7_data_to_order', 10, 1);
function wc_save_cf7_data_to_order($order_id) {
    
    $posted_data = WC()->session->get('cf7_posted_data');
    var_dump($posted_data);
    
    if(!empty($posted_data)) {
        foreach($posted_data as $key => $data) {
            echo '<b>', $key, ' : </b> ', $data, '<br />';
        }

        WC()->session->__unset('cf7_posted_data');
    }
}

I believe the WC session set isn't working. I'm looking in the console for the Session Storage and can only see "wc_cart_hash_xxxxxxx", "wc_fragment_xxxxxxx" and "wc_cart_created".

Any idea how I can go ahead to debug this?

CodePudding user response:

I've found an alternative solution on another topic, which solved my problem even if it doesn't explain why the code above didn't work.

add_action('wpcf7_before_send_mail', 'send_form_data_to_wc_session', 5, 1);
function send_form_data_to_wc_session($contact_form) {
    $submission = WPCF7_Submission::get_instance();
    if($submission) {
        $posted_data = $submission->get_posted_data();
        if (!empty($posted_data['try'][0])) {
            // Set data to Session
            session_start();//place this at the top of all code
            $_SESSION['cf7_posted_data']=$posted_data;
        }
    }
}

and to retrieve:

add_action('woocommerce_checkout_before_customer_details', 'wc_save_cf7_data_to_order', 10, 1);

function wc_save_cf7_data_to_order($order_id) {

    session_start();
    $posted_data =  $_SESSION['cf7_posted_data'];
    
    var_dump($posted_data);

}
  • Related