【问题标题】:Make checkout country dropdown readonly in Woocommerce在 Woocommerce 中将结帐国家/地区下拉列表设为只读
【发布时间】:2019-02-16 04:43:54
【问题描述】:

我希望 woocommerce 上的国家/地区下拉列表为只读。

我已经将默认国家/地区设置为澳大利亚,但我希望它们是只读的。

【问题讨论】:

    标签: php woocommerce checkout readonly country


    【解决方案1】:

    Kashalo 的答案是正确的……您也可以使用以下多种方式之一:

    1) 仅适用于结帐结算国家/地区:

    add_filter('woocommerce_checkout_fields', 'readdonly_billing_country_select_field');
    function readdonly_billing_country_select_field( $fields ) {
        // Set billing and shipping country to AU
        WC()->customer->set_billing_country('AU');
        // Make billing country field read only
        $fields['billing']['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );
    
        return $fields;
    }
    

    2) 仅适用于 Checkout 和 My account 结算国家/地区:

    add_filter('woocommerce_billing_fields', 'readdonly_billing_country_select_field');
    function readdonly_billing_country_select_field( $fields ) {
        // Set billing and shipping country to AU
        WC()->customer->set_billing_country('AU');
        // Make billing country field read only
        $fields['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );
    
        return $fields;
    }
    

    3 对于结帐帐单和送货国家/地区:

    add_filter('woocommerce_checkout_fields', 'readdonly_country_select_field');
    function readdonly_country_select_field( $fields ) {
        // Set billing and shipping country to AU
        WC()->customer->set_billing_country('AU');
        WC()->customer->set_shipping_country('AU');
        // Make billing and shipping country field read only
        $fields['billing']['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );
        $fields['shipping']['shipping_country']['custom_attributes'] = array( 'disabled' => 'disabled' );
    
        return $fields;
    }
    

    4) 对于结帐和我的帐户帐单和送货国家/地区:

    add_filter('woocommerce_default_address_fields', 'readdonly_country_select_field');
    function readdonly_country_select_field( $fields ) {
        // Set billing and shipping country to AU
        WC()->customer->set_billing_country('AU');
        WC()->customer->set_shipping_country('AU');
        // Make country field read only
        $fields['country']['custom_attributes'] = array( 'disabled' => 'disabled' );
    
        return $fields;
    }
    

    【讨论】:

    • 非常感谢..一切都很好
    • 您的代码使这些字段被禁用。由于禁用的字段在表单中不可用,因此结帐会引发验证错误。除了kashalos 答案之外,我还需要添加什么来解决这个问题吗?
    【解决方案2】:

    您可以使用woocommerce_form_field_args 将禁用属性添加到 quntry 选择字段。

    将以下代码添加到您的functions.php,您将获得所需的结果。

    add_action('woocommerce_form_field_args', 'disable_country_dropdown', 10, 3);
    
    
    function disable_country_dropdown($args, $key, $value)
    {
        if ($key == 'billing_country') {
            $args['custom_attributes'] = [
                'disabled' => 'disabled',
            ];
        }
        return $args;
    }
    

    当我们禁用选择下拉菜单时的问题,当您单击下订单时选项值未传递,为了解决此问题,我们可以添加具有所需值的隐藏字段,如下所示:

    add_action('woocommerce_after_order_notes', 'billing_country_hidden_field');
    
    function billing_country_hidden_field($checkout)
    {
    
        echo '<input type="hidden" class="input-hidden" name="billing_country"  value="PL">';
    
    }
    

    只需将value="PL" 更改为您的国家/地区代码值,一切都会按预期进行。

    输出:

    使用 StorrFront 主题测试代码。

    【讨论】:

    • 很好,我很早就尝试使它与 ['custom_attributes'] = array( 'readonly' => 'readonly' ) 一起使用……但是“禁用”是选择字段的正确方法.
    • @kashalo 它正在工作,但现在的问题是默认情况下在澳大利亚的国家/地区无法进行结帐...这里说“帐单国家/地区是必填字段。请输入地址继续。”
    • 让我仔细检查一下,然后回复你
    • @pinkwidowbaby 我用解决方案更新了我的答案,请检查
    【解决方案3】:
    /*CHECKOUT BILLING ADDRESS READ ONLY*/
      add_action('woocommerce_checkout_fields','customization_readonly_billing_fields',10,1);
            function customization_readonly_billing_fields($checkout_fields){
                $current_user = wp_get_current_user();;
                $user_id = $current_user->ID;
                foreach ( $checkout_fields['billing'] as $key => $field ){
                    if($key == 'billing_company' || $key == 'billing_address_1' || $key == 'billing_address_2' || $key == 'billing_city' || $key == 'billing_postcode' || $key == 'billing_phone' || $key == 'invoice_email' || $key == 'purchase_order' || $key == 'ship_to_first_name' || $key == 'ship_to_last_name'){
                        $key_value = get_user_meta($user_id, $key, true);
                        if( strlen($key_value)>0){
                            $checkout_fields['billing'][$key]['custom_attributes'] = array('readonly'=>'readonly');
                        }
                    }
                }
                return $checkout_fields;
            }
    
    
    if ( is_user_logged_in() ) {
       // your code for logged in user 
       add_filter('woocommerce_checkout_fields', 'readdonly_billing_country_select_field');
    function readdonly_billing_country_select_field( $fields ) {
        $fields['billing']['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );
    
        return $fields;
    }
    
    add_filter('woocommerce_checkout_fields', 'readdonly_billing_state_select_field');
    function readdonly_billing_state_select_field( $fields ) {
        $fields['billing']['billing_state']['custom_attributes'] = array( 'disabled' => 'disabled' );   
        
            return $fields;
    }
        
    } else {
       // your code for logged out user 
    }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 2021-03-24
    • 2019-04-07
    • 2015-09-13
    • 2019-08-07
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多