我的商店中有多种产品,点击“添加到购物车”按钮时,我想在其中进行以下操作:
使用通用按钮时,我既能够创建缩略图并将其URL保存到$ cart_item_data,该按钮既不会将您定向到结帐,也不会在购物车中添加任何内容。而且,一旦添加了产品,商店已经将用户重定向到结帐处。问题是试图同时达到所有这三个点时。
这是我的代码(非常简化):
当我单击“添加到购物车”按钮时,我首先启动AJAX调用:
add_action('wp_footer','custom_jquery_add_to_cart_script');
function custom_jquery_add_to_cart_script(){
//Run code only if on single product page
if (is_product()) {
?>
<script>
window.addEventListener('load', function() {
var atcBtn = document.querySelector(".single_add_to_cart_button");
jQuery(function($) {
atcBtn.addEventListener("click", function(e) {
$.ajax({
type: 'POST',
url: wc_add_to_cart_params.ajax_url,
data: {
action: 'save_image_html2canvas',
},
success: function(data) {
console.log("Ajax complete!");
console.log(data);
},
});
});
});
});
</script>
<?php
}
}
然后通过AJAX执行的相应PHP代码将保存文件(这部分代码实际上不在其中,因为我在此线程中试图对其进行简化)并将图像URL保存到WC会话中< / p>
add_action( 'wp_ajax_save_image_html2canvas', 'save_image_html2canvas' );
add_action( 'wp_ajax_nopriv_save_image_html2canvas', 'save_image_html2canvas' );
function save_image_html2canvas() {
//code to save a specific div to jpg-file
$imageurl = "http://www.example.com/upload/precious.jpg";
WC()->session->set('thumbnail', $imageurl);
echo $imageurl;
wp_die();
}
最后,我要将URL保存到$ cart_item_data中,因此我从会话中提取URL并通过“ woocommerce_add_cart_item_data”将其保存:
add_filter( 'woocommerce_add_cart_item_data', 'save_filter_thumbnail', 10, 3 );
function save_filter_thumbnail( $cart_item_data, $product_id, $variation_id ) {
$thumbnail_url = WC()->session->get('thumbnail');
$cart_item_data['thumbnail'] = $thumbnail_url;
return $cart_item_data;
}
我遇到的问题是, AJAX调用似乎没有足够的时间来完成,直到结帐页面开始加载,给我留下了$ cart_item_data ['thumbnail']结帐时显示“空”。
我一直在到处寻找答案,但是我发现的唯一主题是关于能够通过AJAX将产品添加到购物车而无需重新加载页面,这并不是我真正想做的。
这是在Wordpress 5.2.2,WooCommerce 3.7.0的全新安装上。我正在使用PHP 7.2.10在MAMP服务器上进行开发。任何建议或技巧都将不胜感激。