为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕村225694 2023-05-26 16:11:40
我想阻止(例如,将这些字段设置为只读)用户更改他们在 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;}但问题是:如果用户在注册时没有填写这些字段中的任何一个,他将无法在结帐表单中插入他的数据,因为这些字段不可编辑。我的问题是: 如果字段不为空,如何使它们只读(或禁用)谁能帮我解决这个问题?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

但是从 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语句中删除即可。


查看完整回答
反对 回复 2023-05-26
?
慕斯王

TA贡献1864条经验 获得超2个赞

我相信这就是您要找的,评论并在代码中添加解释


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 );



查看完整回答
反对 回复 2023-05-26
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信