php - WooCommerce 结帐上的自定义隐藏字段未保存到用户元问题
问题描述
我无法弄清楚我在这里缺少什么。
我正在结帐页面上创建一个隐藏字段,其中包含客户选择后的值。
这部分正在工作,正如我在结帐页面上的检查器中看到的那样。
隐藏字段应保存给登录用户,因为我需要它在网站的另一个地方。
我有以下内容:
//This part is working!!
add_action( 'woocommerce_after_checkout_billing_form', function() {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
if( isset($values['programmakeuze']) ){
echo '<input type="hidden" name="programchoice" id="programchoice" class="input-hidden" value="'.$values['programmakeuze'].'">';
}
}
});
//Save hidden field to user
function elearning_checkout_update_user_meta( $customer_id, $posted ) {
if (!empty($_POST['programchoice'])) {
$program = intval($_POST['programchoice'] );
update_user_meta( $customer_id, 'programchoice', $program);
}
}
add_action( 'woocommerce_checkout_update_user_meta', 'elearning_checkout_update_user_meta', 10, 2 );
function testing(){
$id = get_current_user_id();
$value = get_user_meta($id,'programchoice',true);
if ( !empty($value)) {
var_dump ($value);
}
}
add_action('wp_head','testing');
$value
什么都不返回。我在这里想念什么?
解决方案
我已经部分重写了你的代码。包括使用woocommerce_checkout_update_customer
action hook。
还要注意循环break
中的使用for
,因为这是一个特定的 ID,因此大约有 1 个唯一字段
但是,我不会使用wp_head
操作挂钩进行调试。请参阅如何在 WooCommerce 中进行调试。
但这应该足以回答您的问题:
// Display a custom hidden field after checkout billing form
function action_woocommerce_after_checkout_billing_form( $checkout ) {
// Loop through cart items
foreach( WC()->cart->get_cart() as $cart_item ) {
if ( isset( $cart_item['programmakeuze'] ) ) {
echo '<input type="hidden" name="programchoice" id="programchoice" class="input-hidden" value="' . $cart_item['programmakeuze'] . '">';
break;
}
}
}
add_action( 'woocommerce_after_checkout_billing_form', 'action_woocommerce_after_checkout_billing_form', 10, 1 );
// Save/update user data from custom field value
function filter_woocommerce_checkout_update_customer( $customer, $data ) {
// Isset
if ( isset( $_POST['programchoice'] ) ) {
$customer->update_meta_data( '_programchoice', sanitize_text_field( $_POST['programchoice'] ) );
}
}
add_action( 'woocommerce_checkout_update_customer', 'filter_woocommerce_checkout_update_customer', 10, 2 );
// Debugging purposes
function action_wp_head(){
// Get user id
$user_id = get_current_user_id();
// Get user meta
$value = get_user_meta( $user_id, '_programchoice', true );
// NOT empty
if ( ! empty( $value ) ) {
var_dump ( $value );
}
}
add_action( 'wp_head', 'action_wp_head' );
推荐阅读
- nginx - OpenWhisk Ngnix Pod CrashLoopBackOff
- c# - 反序列化具有更多节点的字符串,然后键入将在 c# 中返回的类型
- python - 将基于类的视图中的主键保存到另一个视图(django)
- r - 具有唯一子组名称的组的条形图
- php - 如何在mysql insert语句中将php变量与字符串连接起来
- javascript - Codeigniter:如何将数据库结果转换为 JSON
- python-3.x - 网页抓取和超时错误处理
- python - 将错误从 Python 返回到 PowerShell?
- c - printf 的参数用作格式说明符的参数
- jenkins - 带有完整示例的 bitbucket 分支源插件文档的 Jenkins 作业 dsl?