我正在使用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 );
}
感谢您的帮助!
查尔斯
答案 0 :(得分:0)
对我感到羞耻!我没有必要添加add_action()函数的最后两个参数。因此,参数的默认数量为1,只有一个传递给我的回调。
所以add_action()函数的正确代码是:
add_action('woocommerce_add_order_item_meta', array($this, 'charlie_ajoute_un_order_item_meta'), 10, 3);
希望它可以帮到某人。
查尔斯