Я хочу заполнить некоторые поля адреса доставки (например, улица, район и номер) автоматически после выбора. Например:
Если кто-то выбирает «01 Store — São Paulo», он автоматически заполняет адрес магазина, расположенного в Сан-Паулу. (Это только пример).
Я перепробовал тысячи различных плагинов, фильтров, хуков и действий … Я просмотрел тысячи связанных тем … но безуспешно.
Платежные операторы и шлюзы в Бразилии требуют полностью заполненную адресную форму для обработки платежа. Но клиенты просто ненавидят это!
Любая помощь?
На самом деле я использую хитрость: я создаю один вариант продукта для каждого адреса, затем я применяю фильтр или что-то вроде этого:
<?php
add_action( 'woocommerce_before_checkout_billing_form', 'testing_conditional' );
function testing_conditional ( ) {
global $woocommerce;
// loop through the cart checking the products
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
// checking the product variation ids
if( $_product->variation_id == 165, 170, 069 ) {
add_filter( 'default_checkout_postcode', 'change_default_checkout_postcode' );
function change_default_checkout_postcode() {
return '07400470'; // postcode
}
add_filter( 'default_checkout_shipping_address_1', 'change_default_checkout_shipping_address_1' );
function change_default_checkout_shipping_address_1() {
return 'Street Name';
}
add_filter( 'default_checkout_state', 'change_default_checkout_state' );
function change_default_checkout_state() {
return 'SP'; // state code
}
add_filter( 'default_checkout_city', 'change_default_checkout_city' );
function change_default_checkout_city() {
return 'City Name';
}
}
}
}
?>
Но я бы хотел добавить условие на страницу оформления заказа. Что-то вроде этого:
<?php
function add_shipping_area_checkout_field( $fields ) {
$fields['shipping']['shipping_area'] = array(
'label' => __( 'Shipping Area', 'textdomain' ),
'placeholder' => _x( 'Shipping Area', 'placeholder', 'textdomain' ),
'required' => false,
'type' => 'select',
'options' => array(
'city 1' => 'City 1',
'city 2' => 'City 2',
'city 3' => 'City 3',
'city 4' => 'City 4',
),
'class' => array( 'form-row-wide', 'update_totals_on_change' ),
'clear' => true
);
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'add_shipping_area_checkout_field' );
// From here I don't know what to do
funtion conditional_field_value( $fields ) {
//if an user selects City 1
if $fields['shipping']['shipping_area'] = 'city 1' {
$fields['shipping']['address_1']['value'] = 'Street Name';
$fields['shipping']['city']['value'] = 'City Name';
$fields['shipping']['postcode']['value'] = 07400001;
}
//if an user selects City 2
if $fields['shipping']['shipping_area'] = 'city 2' {
$fields['shipping']['address_1']['value'] = 'Street Name 2';
$fields['shipping']['city']['value'] = 'City Name 2';
$fields['shipping']['postcode']['value'] = 07400002;
}
//if an user selects City 3
if $fields['shipping']['shipping_area'] = 'city 3' {
$fields['shipping']['address_1']['value'] = 'Street Name 3';
$fields['shipping']['city']['value'] = 'City Name 3';
$fields['shipping']['postcode']['value'] = 07000003;
}
}
?>
Спасибо за поддержку
Задача ещё не решена.
Других решений пока нет …