我正在为我的Woo商业结帐页面收集额外的用户元数据。
woocommerce_form_field('myName', array(
'type' =>'text',
'class'=>array('my-field-class form-row-wide'),
'label'=>__('First Name'),
'placeholder'=>__('Please enter your name'),
), $checkout->get_value('myName'));
我正在使用以下代码更新数据库:
/*Update the info with the checkout*/
add_action('woocommerce_checkout_field_update_order_meta','my_custom_checkout_field_update_meta');
function my_custom_checkout_field_update_meta($order_id){
if($_POST['MyName'])
update_post_meta($order_id, 'First Name',esc_attr($POST['MyName']));
}
每次提交时,即使我在本地计算机上工作,也会收到内部服务器错误。我需要收集这些数据并将其保存到数据库中。有人帮忙吗?
答案 0 :(得分:1)
更新:通常情况下,帖子meta_key
不应使用空格和大写字母...
此外,您的附加字段应该在结帐表单中,如果没有提交任何内容,则无法保存任何内容。
要显示自定义文本字段并在提交后将其保存在数据库中,最好的方法是使用以下内容:
// Add checkout custom text field
add_action( 'woocommerce_before_order_notes', 'add_checkout_custom_field', 20, 1 );
function add_checkout_custom_field( $checkout) {
// Text field
woocommerce_form_field('my_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('First Name'),
'placeholder' =>__('Please enter your name'),
), $checkout->get_value('my_name') );
}
// Save the data to the order
add_action('woocommerce_checkout_create_order','my_custom_checkout_field_update_meta');
function my_custom_checkout_field_update_meta( $order ){
if( isset($_POST['my_name']) && ! empty($_POST['my_name']) )
$order->update_meta_data( '_my_name', sanitize_text_field($POST['my_name']) );
}
代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作......
要在订单中保存此数据后,请使用get_post_meta( $order_id, '_my_name', true );
其中$order_id
是动态订单ID ...
您的其他文字字段将位于“订单备注”字段之前:
现在您的附加字段令人困惑,因为结帐页面中已存在结算和发货名字字段。