woocommerce_add_order_item_meta挂钩只发送一个参数;三个预期

时间:2015-06-05 16:06:54

标签: woocommerce wordpress

我正在使用WC v.2.3.9。

woocommerce_add_order_item_meta被解雇但我的回调函数只获得一个参数,预计有三个参数。

我想在创建订单时添加订单商品元。

这个钩子真的可用吗?一些谣言说它被弃用了。

编辑:经过一些研究后,不推荐使用woocommerce_add_order_item_meta()函数。

无论如何,我可以在woocommerce / includes / class-wc-checkout.php中找到它。 " do_action()"在这个钩子上似乎很简单:

// Store the line items to the new/resumed order
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
   $item_id = $order->add_product(
    $values['data'],
    $values['quantity'],
    array(
       'variation' => $values['variation'],
       'totals'    => array(
       'subtotal'     => $values['line_subtotal'],
       'subtotal_tax' => $values['line_subtotal_tax'],
       'total'        => $values['line_total'],
       'tax'          => $values['line_tax'],
       'tax_data'     => $values['line_tax_data'] // Since 2.2
    )
      )
);
   if ( ! $item_id ) {
      throw new Exception( sprintf( __( 'Error %d: Unable to create order. Please try again.', 'woocommerce' ), 402 ) );
   }
   // Allow plugins to add order item meta
   do_action( 'woocommerce_add_order_item_meta', $item_id, $values, $cart_item_key );
}

我的自定义插件代码:

public function __construct(){
   add_action('woocommerce_add_order_item_meta', array($this, 'charlie_ajoute_un_order_item_meta'));
}

public function charlie_ajoute_un_order_item_meta($item_id, $values, $cart_item_key){
   if (isset($values['cred_meta']['cred_post_id'])){
      $annonce_id = $values['cred_meta']['cred_post_id'];
   }
   elseif(isset($values['annonce_concernee'])){
      $annonce_id = $values['annonce_concernee'];
   }
   else{
      $annonce_id = 'turlututu';
/* as $values as well as $$cart_item_key are not set, my order item meta is always "turlututu".*/
   }
   wc_add_order_item_meta( $item_id, 'annonce_concernee', $annonce_id, true );
}

感谢您的帮助!

查尔斯

1 个答案:

答案 0 :(得分:0)

对我感到羞耻!我没有必要添加add_action()函数的最后两个参数。因此,参数的默认数量为1,只有一个传递给我的回调。

所以add_action()函数的正确代码是:

add_action('woocommerce_add_order_item_meta', array($this, 'charlie_ajoute_un_order_item_meta'), 10, 3);

希望它可以帮到某人。

查尔斯