Я использую отличный фрагмент кода (спасибо 7uc1f3r), чтобы разделить заказ, если он содержит какие-либо отложенные товары: разделите заказ WooCommerce и создайте новый заказ, если в исходном заказе есть отложенные товары.
Это работает. здорово создать второй заказ при оформлении заказа, но новый заказ не связан с пользователем, а вместо этого заказ является Гостем.
Как мне установить для вновь созданного заказа Клиента значение пользователя при создании заказа?
function sa_woocommerce_checkout_order_on_backorder( $order_id, $posted_data, $order ) {
// Initialize
$check_for_back_orders = false;
// Loop through order items
foreach ( $order->get_items() as $item_key => $item ) {
// Get product
$product = $item->get_product();
// Product is on backorder
if ( $product->is_on_backorder() ) {
// Will only be executed once if the order contains back orders
if ( $check_for_back_orders == false ) {
$check_for_back_orders = true;
// Create new order with backorders
$backorder_order = wc_create_order();
}
// Add product to 'backorder' order
$backorder_order->add_product( $product, $item['quantity'] );
// Delete item from original order
$order->remove_item( $item->get_id() );
}
}
// If current order contains backorders, retrieve the necessary data from the existing order and apply it in the new order
if ( $check_for_back_orders ) {
// Recalculate and save original order
$order->calculate_totals();
$order->save();
// Obtain necessary information
// Get address
$address = array(
'first_name' => $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'email' => $order->get_billing_email(),
'phone' => $order->get_billing_phone(),
'address_1' => $order->get_billing_address_1(),
'address_2' => $order->get_billing_address_2(),
'city' => $order->get_billing_city(),
'state' => $order->get_billing_state(),
'postcode' => $order->get_billing_postcode(),
'country' => $order->get_billing_country()
);
// Get shipping
$shipping = array(
'first_name' => $order->get_shipping_first_name(),
'last_name' => $order->get_shipping_last_name(),
'address_1' => $order->get_shipping_address_1(),
'address_2' => $order->get_shipping_address_2(),
'city' => $order->get_shipping_city(),
'state' => $order->get_shipping_state(),
'postcode' => $order->get_shipping_postcode(),
'country' => $order->get_shipping_country()
);
// Get order currency
$currency = $order->get_currency();
// Get order payment method
$payment_gateway = $order->get_payment_method();
// Required information has been obtained, assign it to the 'backorder' order
// Set address
$backorder_order->set_address( $address, 'billing' );
$backorder_order->set_address( $shipping, 'shipping' );
// Set the correct currency and payment gateway
$backorder_order->set_currency( $currency );
$backorder_order->set_payment_method( $payment_gateway );
// Calculate totals
$backorder_order->calculate_totals();
// Set order note with original ID
$backorder_order->add_order_note( 'Automated backorder. Created from the original order ID: ' . $order_id );
// Optional: give the new 'backorder' order the correct status
$backorder_order->update_status( 'processing' );
}
}
add_action( 'woocommerce_checkout_order_processed', 'sa_woocommerce_checkout_order_on_backorder', 10, 3 );
Подробнее здесь: https://stackoverflow.com/questions/786 ... k-you-page
Показывать вновь созданный/разделенный заказ и подробную информацию на странице благодарности Woocommerce. ⇐ Php
Кемеровские программисты php общаются здесь
1719255480
Anonymous
Я использую отличный фрагмент кода (спасибо 7uc1f3r), чтобы разделить заказ, если он содержит какие-либо отложенные товары: разделите заказ WooCommerce и создайте новый заказ, если в исходном заказе есть отложенные товары.
Это работает. здорово создать второй заказ при оформлении заказа, но новый заказ не связан с пользователем, а вместо этого заказ является Гостем.
Как мне установить для вновь созданного заказа Клиента значение пользователя при создании заказа?
function sa_woocommerce_checkout_order_on_backorder( $order_id, $posted_data, $order ) {
// Initialize
$check_for_back_orders = false;
// Loop through order items
foreach ( $order->get_items() as $item_key => $item ) {
// Get product
$product = $item->get_product();
// Product is on backorder
if ( $product->is_on_backorder() ) {
// Will only be executed once if the order contains back orders
if ( $check_for_back_orders == false ) {
$check_for_back_orders = true;
// Create new order with backorders
$backorder_order = wc_create_order();
}
// Add product to 'backorder' order
$backorder_order->add_product( $product, $item['quantity'] );
// Delete item from original order
$order->remove_item( $item->get_id() );
}
}
// If current order contains backorders, retrieve the necessary data from the existing order and apply it in the new order
if ( $check_for_back_orders ) {
// Recalculate and save original order
$order->calculate_totals();
$order->save();
// Obtain necessary information
// Get address
$address = array(
'first_name' => $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'email' => $order->get_billing_email(),
'phone' => $order->get_billing_phone(),
'address_1' => $order->get_billing_address_1(),
'address_2' => $order->get_billing_address_2(),
'city' => $order->get_billing_city(),
'state' => $order->get_billing_state(),
'postcode' => $order->get_billing_postcode(),
'country' => $order->get_billing_country()
);
// Get shipping
$shipping = array(
'first_name' => $order->get_shipping_first_name(),
'last_name' => $order->get_shipping_last_name(),
'address_1' => $order->get_shipping_address_1(),
'address_2' => $order->get_shipping_address_2(),
'city' => $order->get_shipping_city(),
'state' => $order->get_shipping_state(),
'postcode' => $order->get_shipping_postcode(),
'country' => $order->get_shipping_country()
);
// Get order currency
$currency = $order->get_currency();
// Get order payment method
$payment_gateway = $order->get_payment_method();
// Required information has been obtained, assign it to the 'backorder' order
// Set address
$backorder_order->set_address( $address, 'billing' );
$backorder_order->set_address( $shipping, 'shipping' );
// Set the correct currency and payment gateway
$backorder_order->set_currency( $currency );
$backorder_order->set_payment_method( $payment_gateway );
// Calculate totals
$backorder_order->calculate_totals();
// Set order note with original ID
$backorder_order->add_order_note( 'Automated backorder. Created from the original order ID: ' . $order_id );
// Optional: give the new 'backorder' order the correct status
$backorder_order->update_status( 'processing' );
}
}
add_action( 'woocommerce_checkout_order_processed', 'sa_woocommerce_checkout_order_on_backorder', 10, 3 );
Подробнее здесь: [url]https://stackoverflow.com/questions/78663861/show-newly-created-split-order-and-details-on-woocommerce-thank-you-page[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия