如何禁用 WooCommerce 结帐中预填的字段?

我想阻止(例如,将这些字段设置为只读)用户更改他们在 WooCommerce 结帐表单上的账单信息。


我目前正在使用这个代码片段:


add_filter('woocommerce_billing_fields', 'mycustom_woocommerce_billing_fields', 10, 1 );

function mycustom_woocommerce_billing_fields($fields)

{

   $fields['billing_first_name']['custom_attributes'] = array('readonly'=>'readonly');

   $fields['billing_last_name']['custom_attributes'] = array('readonly'=>'readonly');

   $fields['billing_email']['custom_attributes'] = array('readonly'=>'readonly');

   $fields['billing_phone']['custom_attributes'] = array('readonly'=>'readonly');

   return $fields;

}

但问题是:如果用户在注册时没有填写这些字段中的任何一个,他将无法在结帐表单中插入他的数据,因为这些字段不可编辑。


我的问题是: 如果字段不为空,如何使它们只读(或禁用)


谁能帮我解决这个问题?


慕村225694
浏览 128回答 2
2回答

守着星空守着你

但是从 WooCommerce 3 开始,您可以使用如下WC_Checkout get_value()专用方法:add_filter( 'woocommerce_billing_fields', 'filter_wc_billing_fields', 10, 1 );function filter_wc_billing_fields( $fields ) {    // On checkout and if user is logged in    if ( is_checkout() && is_user_logged_in() ) {        // Define your key fields below        $keys_fields = ['billing_first_name', 'billing_last_name', 'billing_email', 'billing_phone'];        // Loop through your specific defined fields        foreach ( $keys_fields as $key ) {            // Check that a value exist for the current field            if( ( $value = WC()->checkout->get_value($key) ) && ! empty( $value ) ) {                // Make it readonly if a value exist                $fields[$key]['custom_attributes'] = ['readonly'=>'readonly'];            }        }    }    return $fields;}代码进入您的活动子主题(或活动主题)的 functions.php 文件。测试和工作。如果您希望此代码在“我的帐户”>“地址”>“编辑...”中也处于活动状态,您只需is_checkout() &&从第一个IF语句中删除即可。

慕斯王

我相信这就是您要找的,评论并在代码中添加解释function mycustom_woocommerce_billing_fields( $fields ) {       // Get current user    $user = wp_get_current_user();    // User id    $user_id = $user->ID;    // User id is found    if ( $user_id > 0 ) {         // Fields        $read_only_fields = array ( 'billing_first_name', 'billing_last_name', 'billing_email', 'billing_phone' );        // Loop        foreach ( $fields as $key => $field ) {                 if( in_array( $key, $read_only_fields ) ) {                // Get key value                $key_value = get_user_meta($user_id, $key, true);                if( strlen( $key_value ) > 0 ) {                    $fields[$key]['custom_attributes'] = array(                        'readonly'=>'readonly'                    );                }            }        }    }   return $fields;}add_filter('woocommerce_billing_fields', 'mycustom_woocommerce_billing_fields', 10, 1 );
打开App,查看更多内容
随时随地看视频慕课网APP