添加到购物车并点击

时间:2019-08-21 11:41:28

标签: javascript php ajax woocommerce

我的商店中有多种产品,点击“添加到购物车”按钮时,我想在其中进行以下操作:

  1. 启动AJAX调用,以将在单个产品页面(通过html2canvas.js)上可见的div的jpg图像(缩略图)保存在服务器上
  2. 将图片的网址保存到$ cart_item_data中,这样我就可以在下一页上显示它(结帐)
  3. 将产品添加到购物车并直接转到结帐处

使用通用按钮时,我既能够创建缩略图并将其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服务器上进行开发。任何建议或技巧都将不胜感激。

0 个答案:

没有答案