2013-09-14 1 views
4

Я хочу иметь возможность добавлять метаданные к каждому элементу в заказе после завершения оплаты. Ниже приведен код, который я до сих пор:Почему я не могу добавить элемент meta после завершения заказа?

add_action('woocommerce_order_status_completed', array($this, 'action_fuck_it_all')); 

public function action_fuck_it_all($order_id) 
{ 
    $order = new WC_Order($order_id); 
    $items = $order->get_items(); 
     foreach ($items as $item) { 
      $product_id = $item['product_id']; 
      $item_id = $item['item_id']; 
      $licence = $this->_getProductLicenseCode($product_id); 
      if(!$licence){ 
       return false; 
      } 
      woocommerce_add_order_item_meta($item_id, 'attribute_licence_code', $licence->licence_code); 
      $this->_setLicenceCodeStatus($licence->licence_id, 'assigned'); 
     } 
} 
protected function _getProductLicenseCode($product_id) 
{ 
    global $wpdb; 

    $query = "SELECT licence_id, product_id, licence_code, licence_status FROM {$wpdb->prefix}wc_product_licences 
       WHERE product_id = $product_id 
       AND licence_code <> '' 
       AND licence_status = 'available' 
       ORDER BY creation_date ASC 
       LIMIT 1"; 
    //print $query.'<br/>'; 
    return $wpdb->get_row($query); 
} 
protected function _setLicenceCodeStatus($licence_id, $status) 
{ 
    global $wpdb; 

    $data = array('licence_status' => $status); 
    if($status == 'assigned') 
    { 

    } 
    $wpdb->update($wpdb->prefix . 'wc_product_licences', 
        $data, 
        array('licence_id' => (int)$licence_id)); 
} 

Согласно моему тестированию, все, кажется, работает (получение лицензии, установка лицензии, изменение статуса лицензии на назначен, и т.д.), за исключением лицензионного кода не вставлен в мета для каждого элемента. Любые идеи, что происходит?

Спасибо!

+6

хорошее имя функции – madebydavid

ответ

0

Попробуйте сделать это на другой крючок, например, так:

add_action('woocommerce_add_order_item_meta', 'my_order_item_meta'), 10, 2); 

function my_order_item_meta($item_id, $values, $cart_item_key) { 

    $product_id = $values['data']->id; 

    $licence = $this->_getProductLicenseCode($product_id); 
    if(!$licence){ 
     return false; 
    } 
    wc_add_order_item_meta($item_id, 'attribute_licence_code', $licence->licence_code); 
    $this->_setLicenceCodeStatus($licence->licence_id, 'assigned'); 
} 
0

ОК здесь item_id не внутри $ пунктов это ключ $ элементов

add_action('woocommerce_order_status_completed', array($this, 'my_machine')); 
    public function my_machine($order_id) 
    { 
     $order = new WC_Order($order_id); 
     $items = $order->get_items(); 
      foreach ($items as $key=>$item) { 
       $product_id = $item['product_id']; 
       $item_id = $key; 
       $licence = $this->_getProductLicenseCode($product_id); 
       if(!$licence){ 
        return false; 
       } 
       woocommerce_add_order_item_meta($item_id, 'attribute_licence_code', $licence->licence_code); 
       $this->_setLicenceCodeStatus($licence->licence_id, 'assigned'); 
      } 
    } 
Смежные вопросы