Woocomerce — условно заполните некоторые поля адреса

Я хочу заполнить некоторые поля адреса доставки (например, улица, район и номер) автоматически после выбора. Например:

Если кто-то выбирает «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;
}
}

?>

Спасибо за поддержку

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …