我正在尝试在商店页面中创建一个会话变量,然后我想在结账页面中显示该变量值。 我在 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 并继续购物车和结账页面,代码这次可以正常工作。
第一次访问时它不起作用。 这是为什么?我该如何解决这个问题?
您需要提前初始化客户会话,因此我们将使用
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>';
}
}
现在应该可以更好地工作了。