i我在单个产品页面上放置了一个自定义代码,以便在单个产品页面上使用add按钮,以便在任何产品上快速购买。但这不是重定向到结帐页面,像默认的woocommerce这样的反应
我在ocean themep functions.php文件中使用的代码是:
function sbw_wc_add_buy_now_button_single()
{
global $product;
printf('<button id="sbw_wc-adding-button" type="submit" name="sbw-wc-buy-now" value="%d" class="single_add_to_cart_button buy_now_button button alt">%s</button>', $product->get_ID(), esc_html__('Buy Now', 'sbw-wc'));
}
add_action('woocommerce_after_add_to_cart_button', 'sbw_wc_add_buy_now_button_single');
// Handle for click on buy now
function sbw_wc_handle_buy_now()
{
if (!isset($_REQUEST['sbw-wc-buy-now'])) {
return false;
}
WC()->cart->empty_cart();
$product_id = absint($_REQUEST['sbw-wc-buy-now']);
$quantity = absint($_REQUEST['quantity']);
if (isset($_REQUEST['variation_id'])) {
$variation_id = absint($_REQUEST['variation_id']);
WC()->cart->add_to_cart($product_id, 1, $variation_id);
} else {
WC()->cart->add_to_cart($product_id, $quantity);
}
wp_safe_redirect(wc_get_checkout_url());
exit;
}
add_action('wp_loaded', 'sbw_wc_handle_buy_now');
// Add "Buy Now" button after the "Add to Cart" button
function sbw_wc_add_buy_now_button_single()
{
global $product;
if (!$product || !is_a($product, 'WC_Product')) {
return;
}
printf(
'<button id="sbw_wc-buy-now-button" type="button" data-product-id="%d" class="single_add_to_cart_button buy_now_button button alt">%s</button>',
esc_attr($product->get_ID()),
esc_html__('Buy Now', 'sbw-wc')
);
}
add_action('woocommerce_after_add_to_cart_button', 'sbw_wc_add_buy_now_button_single');
// Handle Buy Now request
function sbw_wc_handle_buy_now()
{
if (!isset($_POST['sbw-wc-buy-now'])) {
return;
}
WC()->cart->empty_cart();
$product_id = absint($_POST['sbw-wc-buy-now']);
$quantity = isset($_POST['quantity']) ? absint($_POST['quantity']) : 1;
$variation_id = isset($_POST['variation_id']) ? absint($_POST['variation_id']) : 0;
if ($variation_id) {
WC()->cart->add_to_cart($product_id, $quantity, $variation_id);
} else {
WC()->cart->add_to_cart($product_id, $quantity);
}
wp_send_json_success(['redirect' => wc_get_checkout_url()]);
exit;
}
add_action('wp_ajax_sbw_wc_handle_buy_now', 'sbw_wc_handle_buy_now');
add_action('wp_ajax_nopriv_sbw_wc_handle_buy_now', 'sbw_wc_handle_buy_now');
jQuery(document).ready(function ($) {
$('#sbw_wc-buy-now-button').on('click', function () {
var productID = $(this).attr('data-product-id');
var quantity = $('input[name="quantity"]').val() || 1;
var variationID = $('input[name="variation_id"]').val() || 0;
$.ajax({
type: 'POST',
url: wc_add_to_cart_params.ajax_url,
data: {
action: 'sbw_wc_handle_buy_now',
sbw-wc-buy-now: productID,
quantity: quantity,
variation_id: variationID,
},
success: function (response) {
if (response.success && response.redirect) {
window.location.href = response.redirect;
}
},
});
});
});