Php 在Woocommerce 3中以编程方式创建订单后更新产品库存
我编写了一个插件来快速购买产品,而不是通过按钮Php 在Woocommerce 3中以编程方式创建订单后更新产品库存,php,wordpress,woocommerce,stock,orders,Php,Wordpress,Woocommerce,Stock,Orders,我编写了一个插件来快速购买产品,而不是通过按钮添加到购物车 我创建的自定义属性是Color,每种颜色都有产品的数量 问题是:当我点击按钮快速购买产品 它将在WooCommerce>order中自动插入订单 但在库存中,不要减少我购买的产品数量 我要处理的代码如下: add_action("wp_ajax_sb_test_ajax", "sb_test_ajax_callback"); add_action("wp_ajax_nopriv_sb_test_ajax", "sb_test_ajax_
添加到购物车
我创建的自定义属性是Color
,每种颜色都有产品的数量
问题是:当我点击按钮快速购买产品
它将在WooCommerce>order中自动插入订单
但在库存中,不要减少我购买的产品数量
我要处理的代码如下:
add_action("wp_ajax_sb_test_ajax", "sb_test_ajax_callback");
add_action("wp_ajax_nopriv_sb_test_ajax", "sb_test_ajax_callback");
function sb_test_ajax_callback(){
$address = array(
'phone' => $_POST['phone'],
);
$order = wc_create_order(array('customer_id'=>get_current_user_id()));
// print_r($order);
update_post_meta( $order->get_id(), '_billing_phone', $_POST['phone']);
update_post_meta( $order->get_id(), '_billing_email', $_POST['email']);
update_post_meta( $order->get_id(), '_shipping_address_1', 'Tại: '.$_POST['dia_chi']);
update_post_meta( $order->get_id(), '_shipping_last_name', 'Tên: '.$_POST['ho_ten']);
$order->set_customer_user_agent( wc_get_user_agent() );
$order->set_customer_note($_POST['ghi_chu']);
$order->set_address( $address, 'billing' );
if( isset($_POST['product_id']) && $_POST['product_id'] ){
$id = ($_POST['variation_id']) ? $_POST['variation_id'] : $_POST['product_id'];
$order->add_product( get_product( $id ), $_POST['qty'] ); //(get_product with id and next is for quantity)
$order->calculate_totals();
} else {
$cart = WC()->cart;
//print_r($cart);
$cart_hash = md5( json_encode( wc_clean( $cart->get_cart_for_session() ) ) . $cart->total );
$order->set_cart_hash( $cart_hash );
WC_Checkout::create_order_line_items( $order, $cart );
$order->set_total( $cart->total );
$order->set_shipping_total( $cart->shipping_total );
$order->set_discount_total( $cart->get_cart_discount_total() );
$order->set_discount_tax( $cart->get_cart_discount_tax_total() );
$order->set_cart_tax( $cart->tax_total );
$order->set_shipping_tax( $cart->shipping_tax_total );
WC_Checkout::create_order_fee_lines( $order, $cart );
WC_Checkout::create_order_shipping_lines( $order, WC()->session->get( 'chosen_shipping_methods' ), WC()->shipping->get_packages() );
WC_Checkout::create_order_tax_lines( $order, $cart );
WC_Checkout::create_order_coupon_lines( $order, $cart );
$cart->empty_cart();
}
$order->save();
WC()->payment_gateways();
WC()->shipping();
// Load mailer.
$mailer = WC()->mailer();
$email_to_send = 'new_order';
$mails = $mailer->get_emails();
if ( ! empty( $mails ) ) {
foreach ( $mails as $mail ) {
if ( $mail->id == $email_to_send ) {
$mail->trigger( $order->get_id(), $order );
/* translators: %s: email title */
$order->add_order_note( sprintf( __( '%s don't have any notes.', 'woocommerce' ), $mail->title ), false, true );
}
}
}
}
// add custom button woo
add_action('woocommerce_after_add_to_cart_button','cmk_additional_button');
function cmk_additional_button() {
?>
<br/>
<a href="#modal" class="mua_nhanh_nhanh">Quick Buy</a>
<div class="remodal" data-remodal-id="modal">
<button data-remodal-action="close" class="remodal-close"></button>
<div class="mua_nhanh">
<h3>Buy a product: <?php the_title(); ?></h3>
<form action="" method="post" id="buy_click_form">
<input type="hidden" value="buy_click" name="action">
<input id="id_sp" type="hidden" value="<?php the_ID(); ?>" name="product_id">
<input id="ho_ten" type="text" placeholder="Name"/>
<input id="email_kk" type="email" placeholder="Email"/>
<input id="dia_chi" type="text" placeholder="Address"/>
<input type="tel" value="" name="phone" class="one_click_tel" placeholder="Phone number:" onFocus="if(this.value=='') this.value='+84';" >
<input type='button' value='-' class='qtyminus' field='quantity'/>
<input type='text' name='quantity' value='1' class='qty' onkeypress='return event.charCode >= 48 && event.charCode <= 57'/>
<input type='button' value='+' class='qtyplus' field='quantity' />
<textarea rows="2" id="ghi_chu" placeholder="Note(optinal)"></textarea>
<button type="submit" class="buy_click" >Buy Now</button>
</form>
</div>
</div>
add_action(“wp_ajax_sb_test_ajax”,“sb_test_ajax_callback”);
添加动作(“wp_ajax_nopriv_sb_test_ajax”,“sb_test_ajax_callback”);
函数sb\u test\u ajax\u callback(){
$address=数组(
'phone'=>$\u POST['phone'],
);
$order=wc\u create\u order(数组('customer\u id'=>get\u current\u user\u id());
//打印(订单);
更新发布元($order->get\u id(),“'u billing\u phone',$'u post['phone']);
更新发布元($order->get_id(),“'u billing_email',$”发布['email']);
更新发布元数据($order->get_id(),''u shipping_address_1','Tại:“.$”邮政['dia_chi']);
更新发布元数据($order->get_id(),'u shipping_last_name','Tên:'。$\u post['hou ten']);
$order->set_customer_user_agent(wc_get_user_agent());
$order->set_customer_note($_POST['ghi_chu']);
$order->set_address($address,'billing');
如果(isset($\u POST['product\u id'])和&$\u POST['product\u id'])){
$id=($发布['variation\u id'])?$发布['variation\u id']:$发布['product\u id'];
$order->add_product(获取产品($id),$_POST['qty']);//(获取具有id的产品,下一步是数量)
$order->计算_总计();
}否则{
$cart=WC()->cart;
//打印(购物车);
$cart\u hash=md5(json\u编码(wc\u clean($cart->get\u cart\u for\u session())。$cart->total);
$order->set\u cart\u hash($cart\u hash);
WC\u Checkout::创建订单行项目($order,$cart);
$order->set_total($cart->total);
$order->set_shipping_total($cart->shipping_total);
$order->设置折扣总额($cart->获取折扣总额();
$order->设置折扣税($cart->获取折扣税总额();
$order->set\u cart\u tax($cart->tax\u total);
$order->set_shipping_tax($cart->shipping_tax_total);
WC\u Checkout::创建订单费用行($order,$cart);
WC\u Checkout::创建订单发货行($order,WC()->session->get('selected\u shipping\u methods'),WC()->shipping->get\u packages());
WC_Checkout::创建_order_tax_行($order,$cart);
WC_Checkout::创建_订单_优惠券_行($order,$cart);
$cart->empty_cart();
}
$order->save();
WC()->支付网关();
WC()->shipping();
//装载邮件。
$mailer=WC()->mailer();
$email_to_send='new_order';
$mails=$mailer->get_emails();
如果(!空($mails)){
foreach($mails作为$mail){
如果($mail->id=$email\u to\u send){
$mail->trigger($order->get_id(),$order);
/*翻译人员:%s:电子邮件标题*/
$order->add\u order\u note(sprintf(\uuuuu(“%s没有任何注释”),'woocommerce'),$mail->title),false,true);
}
}
}
}
//添加自定义按钮woo
添加操作(“添加到购物车按钮后的woocommerce按钮”,“cmk附加按钮”);
功能cmk_附加_按钮(){
?>
购买产品:
更新-更新库存的正确方法是
此方法还发送电子邮件通知,并添加2条管理员注释(一条用于股票更新,另一条用于状态更改)
现在,在您的代码中有很多小错误和过时的代码。您必须在任何地方都使用CRUD setters方法。我已经对您的主要功能代码进行了更改并重新访问:
add_action("wp_ajax_sb_test_ajax", "sb_test_ajax_callback");
add_action("wp_ajax_nopriv_sb_test_ajax", "sb_test_ajax_callback");
function sb_test_ajax_callback(){
$order = wc_create_order(array('customer_id'=>get_current_user_id()));
$order->set_customer_user_agent( wc_get_user_agent() );
$order->set_customer_ip_address( WC_Geolocation::get_ip_address() );
$order->set_currency( get_woocommerce_currency() );
$order->set_prices_include_tax( 'yes' === get_option( 'woocommerce_prices_include_tax' ) );
// Customer data (use CRUD setters)
$order->set_billing_phone( $_POST['phone'] );
$order->set_billing_email( $_POST['email'] );
$order->set_shipping_address_1( 'Tại: '.$_POST['dia_chi'] );
$order->set_shipping_last_name( 'Tên: '.$_POST['ho_ten'] );
$order->set_customer_note( $_POST['ghi_chu'] );
if( isset($_POST['product_id']) && $_POST['product_id'] ){
$product_id = ($_POST['variation_id']) ? $_POST['variation_id'] : $_POST['product_id'];
// Get_product with id and next is for quantity
$order->add_product( wc_get_product( $product_id ), $_POST['quantity'] ); // <= corrected
} else {
$cart = WC()->cart;
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
$shipping_packages = WC()->shipping->get_packages();
$cart_hash = md5( json_encode( wc_clean( $cart->get_cart_for_session() ) ) . $cart->total );
$order->set_cart_hash( $cart_hash );
$order->set_total( $cart->total );
$order->set_shipping_total( $cart->shipping_total );
$order->set_discount_total( $cart->get_cart_discount_total() );
$order->set_discount_tax( $cart->get_cart_discount_tax_total() );
$order->set_cart_tax( $cart->tax_total );
$order->set_shipping_tax( $cart->shipping_tax_total );
WC()->checkout->create_order_line_items( $order, $cart );
WC()->checkout->create_order_shipping_lines( $order, $chosen_shipping_methods, $shipping_packages );
WC()->checkout->create_order_tax_lines( $order, $cart );
WC()->checkout->create_order_coupon_lines( $order, $cart );
WC()->checkout->create_order_fee_lines( $order, $cart );
$cart->empty_cart();
}
// [Not really needed] Get an instance of WC_emails object
# $mailer = WC()->mailer()->get_emails();
# $email_title = $mailer['WC_Email_New_Order']->title; // email title
// [Not really needed] Admin note
# $note = sprintf( __( "%s don't have any notes.", "woocommerce" ), $email_title );
# $order->add_order_note( $note, false, true );
// Update totals
$order->calculate_totals();
// Save the data
$order->save();
## STOCK and Status update
$order->payment_complete();
## [NOT needed] Send new order email notification
# $mailer['WC_Email_New_Order']->trigger( $order->get_id() );
# echo '<p>Order generated</p>';
}
add_action(“wp_ajax_sb_test_ajax”,“sb_test_ajax_callback”);
添加动作(“wp_ajax_nopriv_sb_test_ajax”,“sb_test_ajax_callback”);
函数sb\u test\u ajax\u callback(){
$order=wc\u create\u order(数组('customer\u id'=>get\u current\u user\u id());
$order->set_customer_user_agent(wc_get_user_agent());
$order->set_customer_ip_address(WC_Geolocation::get_ip_address());
$order->set_currency(获取_商业_currency());
$order->set_prices_include_tax('yes'==get_选项('woocommerce_prices_include_tax'));
//客户数据(使用CRUD设置器)
$order->set_billing_phone($_POST['phone']);
$order->set_billing_email($_POST['email']);
$order->set_shipping_address_1('Tại:“.$”邮政['dia_chi']);
$order->set_shipping_last_name('Tên:'。$_POST['ho_ten']);
$order->set_customer_note($_POST['ghi_chu']);
如果(isset($\u POST['product\u id'])和&$\u POST['product\u id'])){
$product\U id=($\U POST['variation\U id'])?$\U POST['variation\U id']:$\U POST['product\U id'];
//获取带有id的产品,下一步是数量
$order->add_product(wc_get_product($product_id),$\u POST['quantity']);//购物车;
$selected_shipping_methods=WC()->session->get('selected_shipping_methods');
$shipping_packages=WC()->shipping->get_packages();
$cart\u hash=md5(json\u编码(wc\u clean($cart->get\u cart\u for\u session())。$cart->total);
$order->set\u cart\u hash($cart\u hash);
$order->set_total($cart->total);
$order->set_shipping_total($cart->shipping_total);
$order->设置折扣总额($cart->获取折扣总额();
$order->设置折扣税($cart->获取折扣税总额();
$order->set\u cart\u tax($cart->tax\u total);
$order->set_shipping_tax($cart->shipping_tax_total);
WC()->结帐->创建订单商品($order,$cart);
WC()->签出->创建订单发货行($order、$selected、$shipping\u methods、$shipping\u packages);
WC()->checkout->创建订单和税单行($order,$cart);
WC()->结帐->创建订单优惠券行($order$