在 Woocommerce 中将结帐国家/地区下拉列表设为只读

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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。

以上是关于在 Woocommerce 中将结帐国家/地区下拉列表设为只读的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce Checkout:在国家下拉列表中添加占位符[重复]

根据发货国家/地区将 Woocommerce 结帐电话字段设为可选

如何在 WooCommerce 中更改结帐国家/地区选择的悬停颜色?

在Woocommerce中将州结帐字段设为可选

php [WooCommerce Core]更改结帐时的默认状态和国家/地区

php [WooCommerce Core]更改结帐时的默认状态和国家/地区