将 WooCommerce 结帐自定义字段保存为用户元数据

问题描述

我想将我的自定义注册字段添加到我的结帐页面表单中。

我正在使用此代码将自定义字段添加到我的注册区域。

顺便说一下,我正在将我的结帐字段用于我的注册字段。

add_filter( 'woocommerce_checkout_fields','custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {

    $fields['billing']['shipping_tc'] = array(
        'label' => __('TC Kimlik No','woocommerce'),'placeholder' => _x('Fatura İçin Gerekli','placeholder','required' => true,'class' => array('form-row-wide'),'clear' => true
    );
    
    return $fields;
}

我尝试使用此代码来更新用户元数据

add_action( 'woocommerce_checkout_update_user_meta','reigel_woocommerce_checkout_update_user_meta',10,2 );
function reigel_woocommerce_checkout_update_user_meta( $customer_id,$posted ) {
    if (isset($posted['shipping_tc'])) {
        $dob = sanitize_text_field( $posted['shipping_tc'] );
        update_user_meta( $user_id,$dob,$_POST[$dob]);
    }
}

没有错误但它不起作用...有人可以帮助我吗?

我在此代码的帮助下成功更新了其他默认结帐值;

// Custom function to save Usermeta or Billing Address of registered user
add_action('woocommerce_created_customer','zk_save_billing_address');
function zk_save_billing_address($user_id){
    $address = $_POST;
    foreach ($address as $key => $field){
        // Only billing fields values
        if( strpos( $key,'billing_' ) !== false ){
            // Condition to add firstname and last name to user meta table
            if($key == 'billing_first_name' || $key == 'billing_last_name'){
                $new_key = str_replace( 'billing_','',$key );
                update_user_meta( $user_id,$new_key,$_POST[$key] );
            }
            update_user_meta( $user_id,$key,$_POST[$key] );
        }
    }
}

如何通过注册更新自定义结帐字段?

这是my registration page

解决方法

主要错误是在帐单部分使用了以 shipping_ 开头的结帐字段...

此外,您最好使用复合钩子 woocommerce_billing_fields 的钩子,它可以为您完成所有工作(因此无需像 WooCommerce 那样将字段保存为用户元数据或订单项元数据)。>

所以唯一需要的代码替换将是(使用字段键 billing_identifier 而不是混淆 shipping_tc

add_filter( 'woocommerce_billing_fields','add_custom_billing_field' );
function add_custom_billing_field( $fields ) {
    $fields['billing_identifier'] = array(
        'label' => __('TC Kimlik No','woocommerce'),'placeholder' => _x('Fatura İçin Gerekli','placeholder','required' => true,'class' => array('form-row-wide'),'clear' => true
    );

    return $fields;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。

该字段还会出现在我的帐户 > 地址 > 编辑帐单邮寄地址中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...