在 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;
【讨论】:
非常感谢..一切都很好 您的代码使这些字段被禁用。由于禁用的字段在表单中不可用,因此结帐会引发验证错误。除了kashalo
s 答案之外,我还需要添加什么来解决这个问题吗?【参考方案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 中更改结帐国家/地区选择的悬停颜色?