Глядя на класс 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;
}