在结帐页面woocommerce上保存选择字段

时间:2014-12-01 13:38:48

标签: php wordpress wordpress-plugin woocommerce customization

我是WooCommerce的新手。我无法弄清楚问题出在哪里才是我的代码

我在结帐页面的结算表单中添加了一个选择字段。

问题

记录未在提交时保存或更新。问题在于使用字段值更新订单元数据。值不在数据库中更新

// checkout page customization start

global $post, $woocommerce; 
// Account select field
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields($fields) {

     $fields['billing']['Account'] = array(
'type'          => 'select',
'class'         => array('billing form-row-wide'),
'label'         => __('Choose an Account'),
'placeholder'   => _x('Account', 'placeholder', 'woocommerce'),
'options'     => array(
                    '' => __( 'Select Account','' ),              
                    ),
'required'    => true,
 );
  return $fields;

}



add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;

if (!$_POST['Account'])
$woocommerce->add_error( __('Please enter your Account.'.$_POST['Account']));
}
///**

问题区域 值未在数据库中更新

//* Update the order meta with field value
//**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['Account']) update_post_meta( $order_id, 'Account',      esc_attr($_POST['Account']));
}

/**
* Update the user meta with field value
**/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
if ($user_id && $_POST['Account']) update_user_meta( $user_id, 'Account', esc_attr($_POST['Account']) );
}

1 个答案:

答案 0 :(得分:0)

这些功能对我来说非常准确。你确定他们没有更新吗?或许你在展示它们时遇到困难。

我稍微调整了一下。首先,使用WooCommerce发送给函数的$posted变量,尽管这是微不足道的,因为$_POST应该是相同的。其次,当您使用esc_attr()时,您正在使用sanitize_text_field()。前者用于在HTML属性中显示数据,而后者用于在保存之前进行清理。

//* Update the order meta with field value
//**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta', 10, 2 );

function my_custom_checkout_field_update_order_meta( $order_id, $posted ) {
    if ( isset( $posted['Account'] ) ){
        update_post_meta( $order_id, 'Account', sanitize_text_field( $posted['Account'] ) );
    }
}

/**
* Update the user meta with field value
**/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta', 10, 2 );
function my_custom_checkout_field_update_user_meta( $user_id, $posted ) {
    if ( $user_id && isset( $posted['Account'] ) ){
        update_user_meta( $user_id, 'Account', sanitize_text_field( $posted['Account'] ) );
    } 
}