gpt4 book ai didi

ajax - Woocommerce Ajax 以编程方式添加到购物车

转载 作者:行者123 更新时间:2023-12-04 14:42:29 28 4
gpt4 key购买 nike

我有这个按钮:

<a href="http://my-site/checkout/" target="_blank" class="dt-sc-button">bla bla</a>

此按钮位于我的主页上,由页面构建器生成。我想要完成的是当有人点击按钮时,它会将他们带到结账处,并将产品添加到购物车。我知道这可以通过 URL 来完成,但我还需要让这个按钮做其他事情(客户想法)。

所以现在我被困在这里:

查询
jQuery(document).ready(function($){     
$(".remove-all").click(function(){
$.ajax({
url: "wp-admin/admin-ajax.php",
data: 'myajax'
});
});
});

PHP
add_action('wp_ajax_myajax', 'myajax');
add_action('wp_ajax_nopriv_myajax', 'myajax');

function myajax() {
global $woocommerce;
$product_id = 264;
$woocommerce->cart->add_to_cart($product_id);
die();
}

我是一个 javascript 菜鸟,所以你能指出我正确的方向,或者给我一个关于我做错了什么的提示。

提前致谢!

最佳答案

正如我在评论中提到的,您几乎可以借用核心 WooCommerce 功能。

首先,这是我们要尝试ajaxify的按钮:

<a href="http://local.wordpress.dev/checkout/" class="button test-button">bla bla</a>

其次,我们将加载我们的自定义脚本并将重要的变量传递给它,例如 admin ajax 和 checkout url。
add_action( 'wp_enqueue_scripts', 'so_load_script', 20 );
function so_load_script(){
wp_enqueue_script( 'so_test', plugins_url( 'js/test.js', __FILE__ ) );
$i18n = array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'checkout_url' => get_permalink( wc_get_page_id( 'checkout' ) ) );
wp_localize_script( 'so_test', 'SO_TEST_AJAX', $i18n );
}

现在我们将编写我们的 ajax 回调,它几乎是从 WooCommerce 核心逐字复制的,只有一些小的修改:
add_action('wp_ajax_myajax', 'myajax_callback');
add_action('wp_ajax_nopriv_myajax', 'myajax_callback');

/**
* AJAX add to cart.
*/
function myajax_callback() {
ob_start();

//$product_id = 264;
$product_id = 34;
$quantity = 1;
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
$product_status = get_post_status( $product_id );

if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity ) && 'publish' === $product_status ) {

do_action( 'woocommerce_ajax_added_to_cart', $product_id );

wc_add_to_cart_message( $product_id );

} else {

// If there was an error adding to the cart, redirect to the product page to show any errors
$data = array(
'error' => true,
'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink( $product_id ), $product_id )
);

wp_send_json( $data );

}

die();

}

最后是 test.js的内容:
jQuery(document).ready(function($){     
$(".test-button").click(function(e){
e.preventDefault(); // Prevent the click from going to the link

$.ajax({
url: wc_add_to_cart_params.ajax_url,
method: 'post',
data: {
'action': 'myajax'
}
}).done( function (response) {
if( response.error != 'undefined' && response.error ){
//some kind of error processing or just redirect to link
// might be a good idea to link to the single product page in case JS is disabled
return true;
} else {
window.location.href = SO_TEST_AJAX.checkout_url;
}
});

});

});

关于ajax - Woocommerce Ajax 以编程方式添加到购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656739/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com