php - 将数据保存到 WooCommerce session

标签 php session wordpress woocommerce form-submit

我正在尝试将简单的文本输入保存到 WooCommerce session 中。当用户将东西添加到他们的购物车时,就会创建 session 。

我的输入字段存在于自定义页面模板中,该模板将放置在购物车之后但结帐之前的用户流中:购物车 > 我的模板 > 结帐。

到目前为止

捕获数据的简单表单(自定义模板文件)

<form name="group" method="post" class="checkout woocommerce-checkout" action="http://localhost:/site.dev/my-template">
    <div class="group-order">
        <p class="form-row form-row woocommerce-validated" id="create_new_group_field">
            <label for="create_new_group" class="">Join an existing group</label>
            <input type="text" class="input-text " name="create_new_group" id="create_new_group">
        </p>
    </div>
</form>

接收和设置数据(我不知道何时/如何运行它。在我的自定义页面)

更新 我已将下面的代码添加到我的页面模板的顶部,以便页面自行处理,然后重新定向到结帐。

函数 set_and_save_input_to_session() {

if( !is_admin( ) ) {
    // User input
    if( ! empty( $_POST['create_new_group'] ) ) {
        $group_input_value =  $_POST['create_new_group']; 

        // Set session and save data
        WC()->session->set( 'group_order_data', $group_input_value );

        wp_redirect( 'http://localhost:28/site.dev/checkout' );
        exit();
    }
}
get_header();

add_action('woocommerce_checkout_process', 'set_and_save_input_to_session');

检索和保存数据

function retrieve_and_save_group_input_value_to_order_meta() {
    $retrived_group_input_value = WC()->session->get( 'group_order_data' );

    update_post_meta( $order_id, '_create_new_group', $retrived_group_input_value );
}
add_action('woocommerce_checkout_update_order_meta', 'retrieve_and_save_group_input_value_to_order_meta');

我目前正在努力解决对我来说更复杂的解决方案,因此,如果有人能指出目前为止我的流程中存在的任何重大缺陷,我将不胜感激。

更新

我可以确认表单正在接收数据并且 WC()->session->set 正在设置数据。 (感谢@Firefog 建议使用 $_SESSION 全局)

在进一步调查并找到 var_dump session 数据的正确位置后,我发现数据是用我原来的方法设置到 session 中的。

数据已设置,但我不明白为什么数据不会保存到订单中。

最佳答案

更多的是说谢谢你解决了我的问题。但这里也有一个答案:

帖子元无法更新,因为您的回调函数中没有 $order_id 参数。这应该可以解决问题:

function retrieve_and_save_group_input_value_to_order_meta( $order_id ) {
    $retrived_group_input_value = WC()->session->get( 'group_order_data' );

    update_post_meta( $order_id, '_create_new_group', $retrived_group_input_value );
}
add_action('woocommerce_checkout_update_order_meta', 'retrieve_and_save_group_input_value_to_order_meta');

关于php - 将数据保存到 WooCommerce session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243274/

相关文章:

PHP子串删除

PHP,100 个 div 我需要从右上角的所有 div 中删除边距(不改变我的包装)

php - session VS 温度。 cookies

php - WooCommerce 中的类以使用 Jquery 显示/隐藏

php - 在 'Comments Template' 之外显示 Wordpress 'loop'

php - PDO 使用外键创建表

javascript - 如何添加事件选择器

ubuntu - 如何使用 xrdp 在 ubuntu 中重用 session

php - 如何判断 session 是否处于事件状态?

php - 白皮书 : How to change text from title to date for each different post in archive on hover with HTML/CSS?