我需要改变的正常行为place_order
结账时按钮:如果已有订单未完成(状态 = 正在处理),WooCommerce 应向该订单添加商品,而不是创建新订单。否则,它应该以默认方式创建一个新订单。
function custom_order() {
$user_role = wp_get_current_user()->roles[0];
$customer = new WC_Customer($user_id);
$last_order = $customer->get_last_order();
$last_order_id = $last_order->get_id();
$last_order_data = $last_order->get_data();
$last_order_status = $last_order->get_status();
if ( $user_role === "administrator" ) {
if ($last_order_status === "processing") {
foreach ( WC()->cart->get_cart() as $cart_item ) {
$product = $cart_item['data'];
$product_id = $product->get_id();
$quantity = $product->get_quantity();
$last_order->add_product($product, $quantity);
}
}
else {
// do the normal thing
}
}
}
我尝试过以下钩子:
add_action('woocommerce_new_order', 'custom_order', 10, 3);
add_filter('woocommerce_create_order', 'custom_order', 10, 2);
哪一个是正确的以及如何将这一新条件添加到默认订单功能中?
add_filter('woocommerce_create_order', 'create_or_update_order', 10, 2);
function create_or_update_order() {
$user_obj = wp_get_current_user();
$user_role = $user_obj->roles[0];
$user_id = $user_obj->ID;
$customer = new WC_Customer($user_id);
$last_order = $customer->get_last_order();
$last_order_id = $last_order->get_id();
$last_order_data = $last_order->get_data();
$last_order_status = $last_order->get_status();
if ('administrator' === $user_role) {
if ('processing' === $last_order_status) {
foreach (WC()->cart->get_cart() as $cart_item) {
$product = $cart_item['data'];
$product_id = $product->get_id();
$quantity = $cart_item['quantity'];
$last_order->add_product($product, $quantity);
}
return $last_order_id;
} else {
return null;
}
}
return null;
}
班级内部class-wc-checkout.php
,create_order 函数在创建订单之前提供了一个钩子。如果订单ID已经存在,则不会创建另一个订单。如果满足条件,我们将返回订单ID。
public function create_order( $data ) {
// Give plugins the opportunity to create an order themselves.
$order_id = apply_filters( 'woocommerce_create_order', null, $this );
if ( $order_id ) {
return $order_id;
}......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)