默认情况下,我想在基于woocommerce的网站上将用户的先前数据放在结帐页面字段中。我不能为名字,姓氏和电话字段设置值,尽管可以为其他字段设置值。我该如何解决这个问题?
答案 0 :(得分:0)
查看WC_Checkout类(/includes/class-wc-checkout.php),它包含一个get_value
方法,该方法负责表单中的默认方法。
此方法具有筛选器woocommerce_checkout_get_value
,可用于覆盖为每个字段加载的默认值。
下面是一个示例,该示例同时覆盖了名字(开票和送货)和姓氏:
add_filter('woocommerce_checkout_get_value', function( $value, $input ) {
// first check if user is logged in
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
switch ($input) {
case 'billing_first_name':
case 'shipping_first_name':
$value = 'Jack'; // fixed default
break;
case 'billing_last_name':
case 'shipping_last_name':
$value = $current_user->user_lastname; // use lastname from user profile
break;
default:
// don't change if we don't have substituting data
break;
}
}
return $value;
},10 ,2 );
在同一方法中,还有一个过滤器default_checkout_{form_field}
,该过滤器可让您首先检查现有值(前者是一种短路,阻止正常的默认值加载),例如:
add_filter('default_checkout_billing_first_name', 'woocommerce_override_default_checkout_values', 10, 2 );
add_filter('default_checkout_billing_last_name', 'woocommerce_override_default_checkout_values', 10, 2 );
add_filter('default_checkout_shipping_first_name', 'woocommerce_override_default_checkout_values', 10, 2 );
add_filter('default_checkout_shipping_last_name', 'woocommerce_override_default_checkout_values', 10, 2 );
function woocommerce_override_default_checkout_values( $value, $input ) {
// first check if user is logged in
if ( is_user_logged_in() ) {
// only load if value is empty
if (empty($value)) {
// read your own
$value = '...';
}
}
return $value;
}