WooCommerce 会话变量初始化

问题描述 投票:0回答:1

我正在尝试在商店页面中创建一个会话变量,然后我想在结账页面中显示该变量值。 我在 woocommerce 功能页面中编写了这段代码:

// Creating session variables
add_action( 'template_redirect', 'oturum_degiskeni_olustur' );
function oturum_degiskeni_olustur () {
    if ( isset( $_GET['konumu'] ) || isset( $_GET['masa_no'] ) ) {
        $konum   = isset( $_GET['konumu'] )   ? esc_attr( $_GET['konumu'] )   : '';
        $masa = isset( $_GET['masa_no'] ) ? esc_attr( $_GET['masa_no'] ) : '';

        // Set the session data
        WC()->session->set( 'custom_data', array( 'konum' => $konum, 'masa' => $masa ) );
   
    }
}


// Show session variables in checkout page
add_action('woocommerce_before_checkout_form', 'yeni_alanlar');

function yeni_alanlar($checkout){

    $data = WC()->session->get('custom_data');

    echo '<div id="custom_checkout_field">';

    if( isset($data['konum']) && ! empty($data['konum']) && isset($data['masa']) && ! empty($data['masa']) ){
        echo '<p><strong>Konumunuz : </strong>' . $data['konum'] .'<br/><strong>Masanız : </strong>' . $data['masa'] .'</p>';
    }

    echo '</div>';
}

会话变量的 URL:www.domain.com/shop/?konumu=newyork&masa_no=12

但是此代码在用户第二次访问时有效。

例如;用户使用此自定义 URL 并访问商店页面并继续购物车和结账页面。但是,我的代码不起作用。然后,用户再次访问此自定义 URL 并继续购物车和结账页面,代码这次可以正常工作。

第一次访问时它不起作用。 这是为什么?我该如何解决这个问题?

php wordpress session woocommerce hook-woocommerce
1个回答
3
投票

您需要提前初始化客户会话,因此我们将使用

template_redirect
方法
init
WC_Session_Handler
 更改为 
set_customer_session_cookie()
钩子,例如:

// Creating session variables
add_action( 'woocommerce_init', 'add_custom_wc_session_variables' );
function add_custom_wc_session_variables () {
    if ( is_admin() ) return;

    // Early initialize customer session
    if ( isset(WC()->session) && ! WC()->session->has_session() ) {
        WC()->session->set_customer_session_cookie( true );
    }

    if ( isset( $_GET['konumu'] ) && isset( $_GET['masa_no'] ) ) {
        $konum = isset( $_GET['konumu'] )  ? esc_attr( $_GET['konumu'] )  : '';
        $masa  = isset( $_GET['masa_no'] ) ? esc_attr( $_GET['masa_no'] ) : '';

        // Set the session data
        WC()->session->set( 'custom_data', array( 'konum' => $konum, 'masa' => $masa ) );
    }
}

// Show session variables in checkout page
add_action('woocommerce_before_checkout_form', 'yeni_alanlar');
function yeni_alanlar(){
    if( ( $data = WC()->session->get('custom_data') ) 
    && isset($data['konum']) && isset($data['masa']) ) {

        echo '<div id="custom_checkout_field">
            <p><strong>Konumunuz : </strong>' . $data['konum'] .'<br/>
            <strong>Masanız : </strong>' . $data['masa'] .'</p>
        </div>';
    }
}

现在应该可以更好地工作了。

© www.soinside.com 2019 - 2024. All rights reserved.