Не удается установить значение по умолчанию для некоторых полей на странице оформления заказа - PullRequest
0 голосов
/ 06 мая 2019

Я хочу разместить по умолчанию данные моего пользователя в полях страницы оформления заказа на моем веб-сайте, основанном на woocommerce.Я не могу установить значение для имени, фамилии и телефона, хотя я могу установить значение для других полей.Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 07 мая 2019

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