Изменить поля адреса в аккаунте
-
Нужно изменить поля billing address на странице аккаунта woocommerce.
написал такой фильтр:add_filter('woocommerce_my_account_my_address_formatted_address', 'my_account_address_formatted_address_func', 10, 3); function my_account_address_formatted_address_func($args, $customer_id, $name) { unset($args['address_2']); $args['phone'] = get_user_meta($customer_id, $name . '_phone', true); return $args; }
Однако, на выходе получаю пустой массив. Как исправить?
-
Сделал так:
add_filter('woocommerce_my_account_my_address_formatted_address', 'my_account_address_formatted_address_func', 10, 3); function my_account_address_formatted_address_func($args, $customer_id, $name) { unset($args[$name . '_address_2']); $args[$name . '_phone'] = get_user_meta($customer_id, $name . '_phone', true); return $args; }
ничего не изменилось
Если это у вас вызывает такие трудности, почему бы не воспользоваться готовыми плагинами?
потому что я не нашел ни одного подходящего под задачу плагина.
на станице оформления заказа сделан переключатель юр.лицо — физ.лицо, соответственно, при выборе юр.лица реализованы поля ИНН, КПП и т.п. с проверкой на правильность заполнения.
в ЛК надо так же выводить эти поля, при этом, скрыв все лишнее.Подскажете готовый плагин, который это сможет реализовать — буду благодарен.
попробуйте этот: https://ru.wordpress.org/plugins/saphali-woocommerce-lite/
у него реализована условная логика.что-то я не нашел в saphali lite условной логики.
Сочувствую, а она там есть……
видимо и другие плагины не подошли, потому что «ниасилил»ну так может, подскажете, где она там? ткнете, так сказать, носом?
В разделе
Управление полями
есть и логика и все остальные действия с полямиИМХО у вас изначально не правильный подход.
Я бы юридических лиц сделал бы из адреса доставки, со своим набором полей.вы на вопрос не ответили.
где в saphali lite условная логика исходя из моих нужд?
«ниасилили» найти, да?так-то я и изначальный вопрос не читал на тот момент -)))
насчет «исходя из ваших нужд» — нужно руками трогать, умозрительно ничего не скажешь, отсюда очень плохо не видно.какая нелепая попытка съехать…
зачем тогда советовали плагин, если не читали вопрос?[ удалено ]
В данном примере уберем поле address_2 добавим поле Отчество и поменяем порядок вывода полей в аккаунте.
form-edit-account.php<label for="account_second_name"><?php esc_html_e('Отчество'); ?></label> <input type="text" class="woocommerce-Input woocommerce-Input--text form-control" name="account_second_name" id="account_second_name" autocomplete="additional-name" value="<?php echo esc_attr(get_user_meta($user->id, 'account_second_name', true)); ?>" />
function.php
Сохраним поле Отчествоadd_action('woocommerce_save_account_details', 'save_additional_fields_account_func', 10, 1); function save_additional_fields_account_func($user_id) { $second_name = !empty($_POST['account_second_name']) ? $_POST['account_second_name'] : ''; update_user_meta($user_id, 'account_second_name', $second_name); }
пересоберем поля:
add_filter('woocommerce_my_account_my_address_formatted_address', 'my_account_address_formatted_addresses', 20, 3); function my_account_address_formatted_addresses($address, $customer_id, $address_type) { $address = array( 'first_name' => ucwords(get_user_meta($customer_id, $address_type . '_first_name', true)), 'last_name' => ucwords(get_user_meta($customer_id, $address_type . '_last_name', true)), 'second_name' => ucwords(get_user_meta($customer_id, 'account_second_name', true)), //поле Отчество 'phone' => get_user_meta($customer_id, $address_type . '_phone', true), 'address_1' => ucwords(get_user_meta($customer_id, $address_type . '_address_1', true)), //'address_2' => ucwords(get_user_meta($customer_id, $address_type . '_address_2', true)), //убираем address_2 'city' => get_user_meta($customer_id, $address_type . '_city', true), 'state' => get_user_meta($customer_id, $address_type . '_state', true), 'postcode' => get_user_meta($customer_id, $address_type . '_postcode', true), 'country' => get_user_meta($customer_id, $address_type . '_country', true) ); return $address; }
Изменим вывод:
add_filter('woocommerce_formatted_address_replacements', function ($replacements, $args) { // говорим, что теперь {name} состоит из фамилии, имени и отчества $replacements['{name}'] = $args['last_name']. ' ' . $args['first_name']. ' ' . $args['second_name']; return $replacements; }, 10, 2); add_filter('woocommerce_localisation_address_formats', 'new_address_formats'); function new_address_formats($formats) { //меняем порядок, добавляем метки. $formats['RU'] = " <strong>Покупатель:</strong> {name}\n <strong>Компания:</strong> {company}\n <strong>Почтовый индекс:</strong> {postcode}\n <strong>Страна:</strong> {country}\n <strong>Город:</strong> {city}\n <strong>Область:</strong> {state}\n <strong>Адрес:</strong> {address_1}\n "; return $formats; }
как-то так.
P.S. Уважаемая администрация, просьба рассмотреть возможность автору темы устанавливать запрет просматривать и комментировать темы для определенных пользователей.
- Ответ изменён 4 года, 8 месяцев назад пользователем Yui.
Уважаемая администрация, просьба рассмотреть возможность автору темы устанавливать запрет просматривать и комментировать темы для определенных пользователей.
вы сами выбираете кому отвечать, а другие выбирают отвечать ли вам,
никому не интересно вести монолог,
а технически ограничения для других, контроллируемые автором темы никто добавлять не станет, есть много других вещей в очереди работ.А еще не нужно хамить и писать унизительные вещи в адрес других пользователей, даже если они вам не помогли (по вашему мнению)
- Ответ изменён 4 года, 8 месяцев назад пользователем Yui.
- Тема «Изменить поля адреса в аккаунте» закрыта для новых ответов.