2017-03-03 5 views
1

WooCommerce에서 on-hold 주문 상태를 다른 것으로 변경하는 방법 (이 주문에 주문 항목이있는 경우)주문에 역 주문 항목이있는 주문 상태 변경

woocommerce_order_status_on-hold 액션 후크에 걸려있는 사용자 지정 함수를 사용하려고 시도했지만 성공하지 못했습니다.

누구든지이 문제에 대해 도움을 줄 수 있습니까?

감사합니다.

답변

0
function mysite_hold($order_id) { 

    $order = new WC_Order($order_id); 
    $items = $order->get_items(); 
    $backorder = FALSE; 

    foreach ($items as $item) { 
     if ($item['Backordered']) { 
      $backorder = TRUE; 
      break; 
     } 
    } 
    if($backorder){ 
     $order->update_status('completed'); //change your status here 
    } 
} 
add_action('woocommerce_order_status_on-hold', 'mysite_hold'); 

//You may need to store your backorder info like below 

wc_add_order_item_meta($item_id, 'Backordered', $qty - max(0, $product->get_total_stock())); 

이 조각 여기

+0

감사합니다.이 라인은 오류를 보여줍니다 : wc_add_order_item_meta ($ item_id, 'Backordered', $ qty - max (0, $ product-> get_total_stock())); –

+0

woocommerce에서 주문 세부 정보를 얻는 방법은 무엇입니까? 주문에 판매 가격이 포함되어있는 경우 주문 상태를 변경하고 싶습니다. –

2

Updated compatibility for woocommerce 3+

이 순서는 "보류"을 상태 인 경우 주문 상태 변경됩니다 woocommerce_thankyou 액션 후크에서 꺾어 사용자 정의 기능,이다 해보세요에 백 오더 제품이 있으면 입니다.

당신은 기능 원하는 새로운 상태 슬러그 변화을 설정 있을 것이다. 여기

은 (코드가 아니라 주석)하는 사용자 정의 기능 입니다 :

add_action('woocommerce_thankyou', 'change_paid_backorders_status', 10, 1); 
function change_paid_backorders_status($order_id) { 

    if (! $order_id) 
     return; 

    // HERE set your new status SLUG for paid back orders <== <== <== <== <== <== <== 
    $new_status = 'completed'; 

    // Get a an instance of order object 
    $order = wc_get_order($order_id); 

    // ONLY for "on-hold" ORDERS Status 
    if (! $order->has_status('on-hold')) 
     return; 

    // Iterating through each item in the order 
    foreach ($order->get_items() as $item_values) { 

     // Get a an instance of product object related to the order item 
     product = version_compare(WC_VERSION, '3.0', '<') ? wc_get_product($item_values['product_id']); : $cart_item->get_product(); 

     // Check if the product is on backorder 
     if($product->is_on_backorder()){ 
      // Change this order status 
      $order->update_status($new_status); 
      break; // Stop the loop 
     } 
    } 
} 

코드는 플러그인 파일에도 활성 자식 테마 (또는 테마)의 function.php 파일이되거나.

코드는 테스트되었으며 작동합니다.