Wordpress:在帐户结算地址中保存自定义结算字段

时间:2017-10-25 18:00:14

标签: wordpress woocommerce custom-fields

使用Wordpress / Woocommerce。

我有这个代码,在结帐页面添加一个名为“NIF / CIF”的自定义结算字段。它工作正常,但它的价值不会保存在客户帐户“帐单地址”数据中。

客户首次订购后,所有帐单邮寄地址值都会保存在他的帐户中:地址,州,国家等。但我的自定义字段未保存。

我想在我的函数中缺少一行代码来保存它在数据库中的值,但我不知道如何从这开始。

/*******************************
    CUSTOM BILLING FIELD
*********************************/
add_filter('woocommerce_billing_fields', 'custom_woocommerce_billing_fields');

function custom_woocommerce_billing_fields($fields)
{

    $fields['nif_cif'] = array(
        'label' => __('NIF/CIF', 'woocommerce'), // Add custom field label
        'placeholder' => _x('NIF/CIF', 'placeholder', 'woocommerce'), // Add custom field placeholder
        'required' => true, // if field is required or not
        'clear' => false, // add clear or not
        'type' => 'text', // add field type
        'class' => array('my-css')    // add class name
    );

    return $fields;
}

2 个答案:

答案 0 :(得分:0)

通过&woocommerce_billing_fields'添加额外的字段。钩是不够的。你错过了两件事。

  1. 使用正确验证NIF / CIF字段 ' woocommerce_after_checkout_validation'钩
  2. 按顺序保存数据 使用' woocommerce_checkout_order_processed'钩

答案 1 :(得分:0)

以下是如何保存自定义字段的示例:

add_action( 'woocommerce_checkout_order_processed', 'prefix_save_field_on_checkout', 11, 2 );
function checkout_order_processed_add_referral_answer( $order_id, $posted ) {
    if ( ! isset( $_POST['nif_cif'] ) ) {
        return;
    }

    $order = wc_get_order( $order_id );

    // WC < 3.0
    update_post_meta( $order->id, 'order_meta_field_name', wc_clean( $_POST['nif_cif'] ) );

    // WC > 3.0
    $order->add_meta_data( 'order_meta_field_name', wc_clean( $_POST['nif_cif'] ), true );
    $order->save();
}