php - WooCommerce session 变量初始化

标签 php wordpress session woocommerce hook-woocommerce

我正在尝试在商店页面中创建一个 session 变量,然后我想在结账页面中显示该变量值。 我在 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>';
}

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

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

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

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

最佳答案

您需要提前初始化客户 session ,因此我们将使用 WC_Session_Handler 方法将 template_redirect 更改为 init Hook set_customer_session_cookie()像:

// Creating session variables
add_action( 'init', 'oturum_degiskeni_olustur' );
function oturum_degiskeni_olustur () {
    // 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>';
    }
}

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

关于php - WooCommerce session 变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62545752/

相关文章:

wordpress - 使用 Nginx 重写仅在 root 上从 URL 中删除 index.php

ajax - Wordpress Auth + Nonce + Ajax + 无模板 - Cookie nonce 无效

php - 使用 Web 服务上的 php session 识别 android httpclient

php - 验证 socket.io/nodejs 的用户

php - MYSQL如何在3个表之间选择这个

php - undefined variable : data (View: C:\cygwin64\home\hp\AddressBook\resources\views\Update\edit.blade.php)

php - 获取今天的日期,在充满日期的表中找到它。 MySQL/PHP

javascript - 在循环中切换函数

php - 我的 WordPress 网站被黑了,被重定向到一些未知来​​源

c# - 是否可以将 session ID 设置为我在 asp.net 中选择的值