Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Woocommerce 为什么我不能在订单完成后添加项目元?_Woocommerce - Fatal编程技术网

Woocommerce 为什么我不能在订单完成后添加项目元?

Woocommerce 为什么我不能在订单完成后添加项目元?,woocommerce,Woocommerce,我想能够添加元数据到每个项目在一个订单后付款完成。以下是我目前掌握的代码: 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();

我想能够添加元数据到每个项目在一个订单后付款完成。以下是我目前掌握的代码:

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));
}
根据我的测试,除了许可证代码没有作为每个项目的元插入外,所有工作似乎都在进行:获取许可证、设置许可证、将许可证状态更改为已分配等。知道发生了什么事吗


谢谢

尝试在另一个钩子上执行此操作,例如:

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');
}
好的 item_id不在$items内,它是$items的键

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');
            }
    }

很好的函数名