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

Wordpress:在帐户帐单地址中保存自定义帐单字段,wordpress,woocommerce,custom-fields,Wordpress,Woocommerce,Custom Fields,使用Wordpress/Woocommerce 我有一个代码,它在结帐页面中添加了一个名为“NIF/CIF”的自定义账单字段。它工作正常,但它的值未保存在客户帐户“账单地址”数据中 客户第一次下单后,所有账单地址值都会保存在他的帐户中:地址、州、国家等,但不会保存我的自定义字段 我猜在我的函数中缺少一行代码来将其值保存在数据库中,但我不知道如何从这个开始 /******************************* CUSTOM BILLING FIELD *************

使用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;
}

通过“woocommerce\u billing\u fields”钩子添加额外字段是不够的。你错过了两件事

  • 使用适当的方法验证NIF/CIF字段 “签出验证后”钩子
  • 按顺序保存数据 使用“woocommerce\u checkout\u order\u processed”钩子

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

    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();
    }
    
    add_action('woocommerce_checkout_order_processed','prefix_save_field_on_checkout',11,2);
    功能签出\u订单\u处理\u添加\u推荐\u答案($order\u id,$posted){
    如果(!isset($\u POST['nif\u cif'])){
    返回;
    }
    $order=wc\u get\u order($order\u id);
    //WC<3.0
    更新发布元数据($order->id,'order\u meta\u field\u name',wc\u clean($\u post['nif\u cif']);
    //WC>3.0
    $order->add_meta_data('order_meta_field_name',wc_clean($_POST['nif_cif']),true);
    $order->save();
    }
    
    您能告诉我如何使用woocommerce\u checkout\u order\u processed吗?谢谢,我会试试的。函数的名称是否应为:“签出时的前缀\保存\字段\而不是“签出\订单\处理\添加\引用\应答”?