【问题标题】:Woocommerce | Clear cart by Ajax电子商务 | Ajax 清除购物车
【发布时间】:2017-03-03 15:52:47
【问题描述】:

我正在尝试设置一个 AJAX 功能来清除我的购物车

HTML

<a onclick="clearCart(this)" data-href="/product-page/" data-productID="182">Go to Product</a>

JavaScript

function clearCart(d) {
    jQuery(document).ready(function($) {
        var productID = d.getAttribute("data-productID");
        $.ajax({
            url: "addtocart.php",
            data: {productID: productID},
            type: "post",
            success: function(output) {
                window.location = d.getAttribute("data-href");
                //alert(output);
            }
        });
    });
}

PHP

if(isset($_POST['productID']) && !empty($_POST['productID'])) {   
    global $woocommerce;
    $woocommerce->cart->empty_cart();
    //echo $_POST['productID'];
}

结果

  • 第 3 行 PHP 引起的内部服务器错误
  • Alerting var output is working(查看注释掉的代码)

解决方案

我自己想通了,@MirzaP 也给了我很大的帮助

JS

      function clearCart(d) {
            jQuery.post(
                "https://dercampus.ch/wp-admin/admin-ajax.php", 
                //ajaxurl, 
                {
                    "action": "clearcart",
                    "data":   d.getAttribute("data-productid")
                }, 
                function(){
                    window.location = d.getAttribute("data-href");
                }
            );
        }

PHP

add_action('wp_ajax_nopriv_clearcart',function(){
    global $woocommerce;
    $woocommerce->cart->empty_cart();
});

【问题讨论】:

  • 当您在 wp-config.php 中将 WP_DEBUG 设置为 true 时,会显示什么内部错误?
  • 这个 php 文件没有显示任何内容。我需要调整任何东西,因为它是 AJAX 调用吗?该文件位于我的插件的子目录中
  • 当您右键单击 -> 检查元素 -> 控制台(在 chrome 中)时,它是否在浏览器控制台中显示任何内容?
  • 点击后显示dercampus.ch/log.png
  • 当您将 WP_DEBUG 设置为 true 然后执行相同操作时,错误 500 是否会扩展?或者,如果您单击 addtocart.php url 本身将标志设置为 true,是否会发生任何事情?此外,您应该真正使用 admin-ajax.php 文件进行 WordPress 的 ajax 调用。

标签: javascript php ajax wordpress woocommerce


【解决方案1】:

请将您的 php 代码更改为

if(isset($_POST['data']) && !empty($_POST['data'])) {   
    global $woocommerce;
    $woocommerce->cart->empty_cart();
    //echo $_POST['productID'];
}

你传入的参数是data而不是productID

【讨论】:

  • 哦,对不起,我已经修改了帖子以使其更具可读性,但忘记调整 AJAX 调用。请查看已编辑的帖子。
  • 您应该尝试在您的 php 调用 dercampus.ch/wp-content/plugins/dercampus/assets/php/… 中执行一些 echo 语句,以确保当直接访问时事情正在到达某处...将 php 代码中的 _POST 更改为 _REQUEST...当然,在您将删除回声并传入随机数以防止直接访问等的最终产品。
  • 我同时想通了,检查更新的帖子。非常感谢您的时间以及 ajax-admin 和 WP_DEBUG 提示!
  • 很高兴听到你已经想通了!
  • 另外,将global $woocommerce 更改为WC()。 global 长期以来一直被弃用,取而代之的是返回 WooCommerce 主类实例的函数。
【解决方案2】:

// before addto cart, only allow 1 item in a cart
add_filter( 'woocommerce_add_to_cart_validation', 'woo_custom_add_to_cart_before' );
 
function woo_custom_add_to_cart_before( $cart_item_data ) {
 
    global $woocommerce;
    $woocommerce->cart->empty_cart();
 
    // Do nothing with the data and return
    return true;
}

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2011-07-01
    • 1970-01-01
    • 2020-11-28
    • 2012-08-02
    相关资源
    最近更新 更多