こんにちは私は良い開発者ちょうど私の自己私はリンク(http://www.ourstore.com.pk/)のような迅速な購入woocommerceを検索していますが購入するか、それを作る方法をtheresの場合はそれを作ることができませんでしたか?私を助けてくださいpls!woocommerceで商品やポップアップクイック購入フォームのクイック購入ボタン?
1
A
答えて
2
私は電話を作成注文に使用しました。しかし、任意のフィールドを追加することができます。ページの フォーム
<form action="" method="post" id="buy_click_form">
<input type="hidden" value="buy_click" name="action">
<input type="hidden" value="<?php the_ID(); ?>" name="product_id">
<input type="tel" value="" name="phone" class="one_click_tel" placeholder="+18 0__ ___ __ __" onFocus="if(this.value=='') this.value='+180';" >
<button type="submit" class="buy_click" >Buy</button>
</form>
JSコード
$('#buy_click_form').submit(function() {
$('.loader').fadeIn(200);
var id = $(this).data('id');
var ob = $('.one_click_tel');
ob.removeClass('error');
var phone = ob.val().replace(/[^\d]+/g, '');
if(phone.match(/^180([\d]{9})$/g)){
$.ajax({
url:ajaxurl,
data: $('#buy_click_form input, #buy_click_form select, .variation_id'),
dataType: 'json',
type: "POST",
success:function(data){
console.log(data);
if(data['redirect']){
window.location = data['redirect'];
}
$('.buy_click').after(data.message);
$('.loader').fadeOut(200);
}
});
} else {
ob.addClass('error');
}
return false;
});
は、Ajaxでフォームを送信し、機能にこのようないくつかのフックを追加します。
add_action("wp_ajax_buy_click", "purchace_one_click");
add_action("wp_ajax_nopriv_buy_click", "purchace_one_click");
function purchace_one_click(){
$address = array(
'phone' => $_POST['phone'],
);
// $order = wc_get_order(385);
$order = wc_create_order(array('customer_id'=>get_current_user_id()));
// print_r($order);
update_post_meta($order->get_id(), '_billing_phone', $_POST['phone']);
$order->set_customer_user_agent(wc_get_user_agent());
$order->set_customer_note('Order by one click');
$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), 1); //(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();
$return_url = wc_get_endpoint_url('order-received', $order->get_id(), wc_get_page_permalink('checkout'));
// $return_url = $order->get_checkout_order_received_url();
$return_url = add_query_arg('key', $order->get_order_key(), $return_url);
$json['redirect'] = $return_url ;
}
$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 email notification manually sent.', 'woocommerce'), $mail->title), false, true);
}
}
}
$json['message'] = __('<p>Thank you fot order! We call you soon.</p>', 'oneplsone');
wp_send_json($json);
}
+0
これは、私がガリナにとって全く無関係な問題をどの程度助けてくれたか、あなたは信じられません。しかし、 'WC_Checkout'メソッドは' WC() - > checkout-> create_order_fee_lines'(例えば)としてアクセスされるべきです。 –
+0
ありがとうございました! –
あなたは私はplsは私を返信言ったことについて理解していれば質問する正しい方法! –