• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Как редактировать "Платёжный адрес/billing address" после оформления заказа

hamelyon

Новичок
Как клиент может отредактировать "Платёжный адрес/billing address" после оформления заказа

Подробнее о магазине:

1. Клиент оформляет заказа который попадает в статус на обработку
2. После обработки менеджер менят на статус готов к оплате
3. На странице оплаты клиент должен указать "Платёжный адрес/billing address" и оплатить

Проблема в том что клиент может указать этот адрес только на странице первичного оформления заказа "checkout". После оформления нету функции обновить эти данные.


Какие варианты были испробованы:

1. Подключаю и добавляю функцию в class-wc-form-handler.php, добавляю обработчик
2. Добавляю обработчик сразу в class-wc-form-handler.php

Оба варианта работают по принципу: форма которая срабатывает по name="" кнопки отправить и передает поля которые добавлял в обработчик. Брал еще за основу функцию process_checkout() но не разобрался до конца и форма делала дубль заказа но уже с нужными данными "Платёжный адрес/billing address"

Прошу помощи советом или возможным решением.
 

ADv

Гуру
Местный
Как клиент может отредактировать "Платёжный адрес/billing address" после оформления заказа

Подробнее о магазине:

1. Клиент оформляет заказа который попадает в статус на обработку
2. После обработки менеджер менят на статус готов к оплате
3. На странице оплаты клиент должен указать "Платёжный адрес/billing address" и оплатить

Проблема в том что клиент может указать этот адрес только на странице первичного оформления заказа "checkout". После оформления нету функции обновить эти данные.


Какие варианты были испробованы:

1. Подключаю и добавляю функцию в class-wc-form-handler.php, добавляю обработчик
2. Добавляю обработчик сразу в class-wc-form-handler.php

Оба варианта работают по принципу: форма которая срабатывает по name="" кнопки отправить и передает поля которые добавлял в обработчик. Брал еще за основу функцию process_checkout() но не разобрался до конца и форма делала дубль заказа но уже с нужными данными "Платёжный адрес/billing address"

Прошу помощи советом или возможным решением.
В Личном кабинете клиента смотрели? site.ru/my-account обычно
 

hamelyon

Новичок
А если эти поля вообще убрать? Зачем их дублировать, если уже в чекауте заполнены?
Нет, при первом заказе они не обязательны как и при регистрации. Для каждого заказа адрес будет разный и запрашивать его нужно только после первой обработки заказа.
 

hamelyon

Новичок
Может кому пригодиться есть еще такое решение. Но это не решает мою проблему

Код:
<?php
add_action( 'woocommerce_customer_save_address', 'jsforwp_update_address_for_orders', 10, 2 );
function jsforwp_update_address_for_orders( $user_id ) {
    $customer_meta = get_user_meta( $user_id );
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => $user_id,
        'post_type'   => wc_get_order_types(),
        'post_status' => array_keys( wc_get_order_statuses() )
    ) );
    foreach( $customer_orders as $order ) {
      update_post_meta( $order->ID, '_billing_first_name', $customer_meta['billing_first_name'][0] );
      update_post_meta( $order->ID, '_billing_last_name', $customer_meta['billing_last_name'][0] );
      update_post_meta( $order->ID, '_billing_company', $customer_meta['billing_company'][0] );
      update_post_meta( $order->ID, '_billing_address_1', $customer_meta['billing_address_1'][0] );
      update_post_meta( $order->ID, '_billing_address_2', $customer_meta['billing_address_2'][0] );
      update_post_meta( $order->ID, '_billing_city', $customer_meta['billing_city'][0] );
      update_post_meta( $order->ID, '_billing_state', $customer_meta['billing_state'][0] );
      update_post_meta( $order->ID, '_billing_postcode', $customer_meta['billing_postcode'][0] );
      update_post_meta( $order->ID, '_billing_country', $customer_meta['billing_country'][0] );
      update_post_meta( $order->ID, '_billing_email', $customer_meta['billing_email'][0] );
      update_post_meta( $order->ID, '_billing_phone', $customer_meta['billing_phone'][0] );
    }
};
?>

Этот плагин обновляет адрес всех заказов клиента автоматически когда клиент меняет свой адрес в личном кабинете
 

hamelyon

Новичок
Решение готово. Если будет интересно выложу на форум
Всем спасибо
 

Useer72

Опытный
Местный
Дак выкладывай! Вдруг кому понадобится
Я бы тоже хотел взглянуть, хоть мне и не нужно, но для понимания полезно
 

iney17

Новичок
Может кому пригодиться есть еще такое решение. Но это не решает мою проблему

Код:
<?php
add_action( 'woocommerce_customer_save_address', 'jsforwp_update_address_for_orders', 10, 2 );
function jsforwp_update_address_for_orders( $user_id ) {
    $customer_meta = get_user_meta( $user_id );
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => $user_id,
        'post_type'   => wc_get_order_types(),
        'post_status' => array_keys( wc_get_order_statuses() )
    ) );
    foreach( $customer_orders as $order ) {
      update_post_meta( $order->ID, '_billing_first_name', $customer_meta['billing_first_name'][0] );
      update_post_meta( $order->ID, '_billing_last_name', $customer_meta['billing_last_name'][0] );
      update_post_meta( $order->ID, '_billing_company', $customer_meta['billing_company'][0] );
      update_post_meta( $order->ID, '_billing_address_1', $customer_meta['billing_address_1'][0] );
      update_post_meta( $order->ID, '_billing_address_2', $customer_meta['billing_address_2'][0] );
      update_post_meta( $order->ID, '_billing_city', $customer_meta['billing_city'][0] );
      update_post_meta( $order->ID, '_billing_state', $customer_meta['billing_state'][0] );
      update_post_meta( $order->ID, '_billing_postcode', $customer_meta['billing_postcode'][0] );
      update_post_meta( $order->ID, '_billing_country', $customer_meta['billing_country'][0] );
      update_post_meta( $order->ID, '_billing_email', $customer_meta['billing_email'][0] );
      update_post_meta( $order->ID, '_billing_phone', $customer_meta['billing_phone'][0] );
    }
};
?>

Этот плагин обновляет адрес всех заказов клиента автоматически когда клиент меняет свой адрес в личном кабинете
не помогло, адрес при оформлении заказа все равно не обновляется
 
Сверху Снизу