2016-08-29 5 views
1

WooCommerce에서 주문 상태가 "완료"되면 제품에 새 카테고리를 적용하고 싶습니다. 제품이 (카테고리 A)에 있고 주문 상태 "완료"에 적용 (카테고리 B)한다고 가정 해 봅시다.주문 상태가 완료되면 제품 카테고리 변경

이렇게 할 방법이 있습니까?

나는 자습서의 몇 가지를 발견하지만, 그들을 결합하는 방법을 모른다 :

https://wordpress.org/support/topic/automatically-add-posts-to-a-category-conditionally

https://wordpress.org/support/topic/woocommerce-on-order-complete-insert-quantity-data-into-custom-database-table

어떻게 이것을 달성 할 수 있습니까?

감사합니다.

답변

2

업데이트(WooCommerce과의 호환성 3 이상)

당신이 제품에 대한 woocommerce 카테고리를 변경하려면, 당신은 카테고리 ID를 받아 wp_set_object_terms() 기본 워드 프레스 기능을 사용한다 또는 슬러그 'product_cat' 분류 파라미터'category'.

woocommerce_order_status_completed 후크

고전적 상태에 순서 변경이 완료 될 때 콜백 함수를 발생하는 데 사용된다.

add_action('woocommerce_order_status_completed', 'add_category_to_order_items_on_competed_status' 10, 1); 

function add_category_to_order_items_on_competed_status($order_id) { 

    // set your category ID or slug 
    $your_category = 'my-category-slug'; // or $your_category = 123; 

    $order = wc_get_order($order_id); 

    foreach ($order->get_items() as $item_id => $product_item) { 
     // compatibility with WC +3 
     if (version_compare(WC_VERSION, '3.0', '<')) 
      $product_id = $product_item['product_id']; 
     else 
      $product_id = $product_item->get_product_id(); 

     wp_set_object_terms($product_id, $your_category, 'product_cat'); 
    } 
} 

아니면 "완료"순서를 필터링하는 조건 기능도 woocommerce_order_status_changed 후크 사용할 수있는 상태가 :

add_action('woocommerce_order_status_changed', 'add_category_to_order_items_on_competed_status' 10, 1); 

function add_category_to_order_items_on_competed_status($order_id) { 

    // set your category ID or slug 
    $your_category = 'my-category-slug'; // or $your_category = 123; 

    $order = wc_get_order($order_id); 
    $order_status = $order->post->post_status; 

    if ($order->has_status('completed')) { 
     foreach ($order->get_items() as $item_id => $product_item) { 
      // compatibility with WC +3 
      if (version_compare(WC_VERSION, '3.0', '<')) 
       $product_id = $product_item['product_id']; 
      else 
       $product_id = $product_item->get_product_id(); 

      wp_set_object_terms($product_id, $your_category, 'product_cat'); 
     } 
    } 
} 

이 코드는 계속

코드입니다 활성 자식 테마 또는 테마의 function.php 파일.

이 코드는 테스트를 거쳐 완전히 작동합니다.

+0

HI, functions.pho에 코드를 붙여 넣으면 코드의 첫 번째 줄과 두 번째 줄에 오류가 발생합니다. 두 번째 줄에 단어 (함수)가 누락 된 것 같지만 코드 첫 줄에 오류가있는 이유를 알지 못합니다. add_action ('woocommerce_order_status_completed', 'add_category_to_order_items_on_competed_status'10, 1); – user3814097

+0

예, 작동합니다! 감사합니다 :) – user3814097

+0

또한 그룹화 된 제품을 사용하고 있습니다. 그룹 목록의 첫 번째 제품이 완성 된 후 범주를 변경했는지 확인할 수 있습니까? – user3814097

0

주문을 완료 한 후에 원하는 작업을 수행하려면 woocommerce_order_status_completed 동작을 사용해야하고 카테고리를 추가하려면 wp_set_object_terms을 사용해야합니다. 따라서이 함수가 작동해야합니다.

function add_cat_product($order_id) { 
    $post_categories = array(); //Array of category IDs. 
    $append = FALSE; // If true, categories will be appended to the post. If false, categories will replace existing categories. 
    $order = new WC_Order($order_id); 
    $items = $order->get_items(); 
    foreach ($items as $item) { 
     //$product_name = $item['name']; 
     $product_id = $item['product_id']; 
     $term_taxonomy_ids = wp_set_object_terms($product_id, $post_categories, 'product_cat', $append); 
     if (is_wp_error($term_taxonomy_ids)) { 
      // There was an error somewhere and the terms couldn't be set. 
     } else { 
      // Success! The post's categories were set. 
     } 
    } 
} 
add_action('woocommerce_order_status_completed', 'add_cat_product'); 
+0

안녕 Raunak - 대답 주셔서 감사하지만 위의 코드에서 [category B]는 어디에 정의합니까? – user3814097

+0

'$ post_categories' 변수에 카테고리 ID를 추가해야합니다. 예를 들어 카테고리 B id가 12라면'$ post_categories = array (12);'라고 써야합니다. –

+0

이 줄에 제품 ID를 정의해야합니까? $ product_id = $ item [ 'product_id']; ? – user3814097

관련 문제