I am defining $_SESSION['session_test'] from $_POST['reason'] I get from AJAX call.

Inside of this function, $_SESSION['session_test'] does get defined, and I get desired echo result.

add_action('wp_ajax_return_reason', array( __CLASS__ , 'select_return_reason'));
static function select_return_reason() {

        $_SESSION['session_test'] = $_POST['reason'];
        echo "REASON: " . $_SESSION['session_test'];
        echo "<br>";


But, when I refresh page and try to echo $_SESSION['session_test'] in some other function below this one, it's empty - I get NULL.

add_action('woocommerce_after_cart_table', array( __CLASS__ , 'display_returned_items'));
static function display_returned_items() {
        echo "Testing: " .  $_SESSION['session_test'];

Why $_SESSION['session_test'] value is available/defined only inside function which is executed by AJAX?

My session_start(); is on the top of the php file, right after the <?php opening tag.

Please let me know if I should provide more info. Thanks.

1 Answer 1


Wrapping this line inside if statement solved the problem:

if(!isset($_SESSION['session_test'])) {
    $_SESSION['session_test'] = $_POST['reason'];

I thought select_return_reason(){...} function which is holding this line was executing only by AJAX, not on each page load.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.