将数据保存到 WooCommerce 会话
Saving data to WooCommerce session
我正在尝试将简单的文本输入保存到 WooCommerce 会话中。当用户将东西添加到他们的购物车时,就会创建会话。
我的输入字段存在于自定义页面模板中,该模板将放置在购物车之后结帐之前的用户流程中:购物车 > 我的模板 > 结帐。
到目前为止
捕获数据的简单表单(自定义模板文件)
<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>
接收和设置数据(我无法弄清楚 when/how 到 运行 这个。在我的自定义页面中)
更新
我已将下面的代码添加到我的页面模板的顶部,以便页面自行处理,然后重新定向到结帐。
函数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
会话数据的正确位置后,我发现数据是用我原来的方法设置到会话中的。
数据已设置,但我不明白为什么数据不会保存到订单中。
这是另一种方法。
第 1 页:
session_start();//place this at the top of all code
$data = $_POST['create_new_group'];
$_SESSION['custom_create_new_group']=$data;
现在在另一页中写入以下内容以接收值:
session_start(); //optional
$retrive_price = $_SESSION['custom_create_new_group'];
更多的是说谢谢你解决了我的问题。但这里也有一个答案:
无法更新 post 元数据,因为您的回调函数中没有 $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');
我正在尝试将简单的文本输入保存到 WooCommerce 会话中。当用户将东西添加到他们的购物车时,就会创建会话。
我的输入字段存在于自定义页面模板中,该模板将放置在购物车之后结帐之前的用户流程中:购物车 > 我的模板 > 结帐。
到目前为止
捕获数据的简单表单(自定义模板文件)
<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>
接收和设置数据(我无法弄清楚 when/how 到 运行 这个。在我的自定义页面中)
更新 我已将下面的代码添加到我的页面模板的顶部,以便页面自行处理,然后重新定向到结帐。
函数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
会话数据的正确位置后,我发现数据是用我原来的方法设置到会话中的。
数据已设置,但我不明白为什么数据不会保存到订单中。
这是另一种方法。
第 1 页:
session_start();//place this at the top of all code
$data = $_POST['create_new_group'];
$_SESSION['custom_create_new_group']=$data;
现在在另一页中写入以下内容以接收值:
session_start(); //optional
$retrive_price = $_SESSION['custom_create_new_group'];
更多的是说谢谢你解决了我的问题。但这里也有一个答案:
无法更新 post 元数据,因为您的回调函数中没有 $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');