热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

添加动作woocommerce_add_to_cart打破网站原创添加到购物车功能

如何解决《添加动作woocommerce_add_to_cart打破网站原创添加到购物车功能》经验,应该怎么弄,您有好建议吗?

我构建了一个node express API并让它监听来自woocommerce_add_to_cart webhook的帖子请求,但是从那里获得的有效载荷基本上没有价值.

body:{ action: 'woocommerce_add_to_cart', arg:'098uoijo098920sa489983jk' }

有没有办法将产品数据添加到这些webhooks?如果不想从functions.php函数发送php curl请求,就像这样

我的functions.php函数:

function custom_add_to_cart($cart_item_key, $product_id, $quantity, 
    $variation_id, $variation, $cart_item_data){
        //added this just to see if my event function even gets called, doesn't appear to 
        echo'
';var_dump($product_id);echo'
';die(); $product_info = json_encode(array($product_id => wc_get_product($product_id))); $request_args = array( 'httpversion' => '1.1', 'headers' => 'Content-Type:application/json', 'body' => $product_info, ); $respOnse= wp_safe_remote_post("myapp.com/endpoint", $request_args); } add_action('woocommerce_add_to_cart', 'custom_add_to_cart', 10, 6);

这导致网站添加到购物车功能中断,所以我的假设是主题巴塞尔使用此操作挂钩并再次将其添加到functions.php导致错误.查看旧的段插件,他们也将此事件用于此目的,因此必须可以在多个位置使用此挂钩.

发生错误的代码段:

   a.ajax({
        url: basel_settings.ajaxurl,
        data: e,
        method: "POST",
        success: function(b) {
            if (b) {
                var c = window.location.toString();
                if (c = c.replace("add-to-cart", "added-to-cart"),
                b.error && b.product_url)
                    return void (window.location = b.product_url);
                if ("yes" === wc_add_to_cart_params.cart_redirect_after_add)
                    return void (window.location = wc_add_to_cart_params.cart_url);
                d.removeClass("loading");
                var e = b.fragments
                  , f = b.cart_hash;
                e && a.each(e, function(b) {
                    a(b).addClass("updating")
                }),
                e && a.each(e, function(b, c) {
                    a(b).replaceWith(c)
                }),
                //line where error gets reported
                b.notices.indexOf("error") > 0 ? (a(".woocommerce-error").length > 0 && a(".woocommerce-error").remove(),
                a(".single-product-content").prepend(b.notices),
                d.addClass("not-added")) : ("widget" == basel_settings.add_to_cart_action && a.magnificPopup.close(),
                d.addClass("added"),
                a(document.body).trigger("added_to_cart", [e, f, d]))
            }
        },
        error: function() {
            console.log("ajax adding to cart error")
        },
        complete: function() {}
    })

错误:

Uncaught TypeError: Cannot read property 'indexOf' of undefined
    at Object.success (theme.min.js?ver=4.0.0:formatted:17037)
    at i (jquery.js?ver=1.12.4:2)
    at Object.fireWith [as resolveWith] (jquery.js?ver=1.12.4:2)
    at y (jquery.js?ver=1.12.4:4)
    at XMLHttpRequest.c (jquery.js?ver=1.12.4:4)

当我从functions.php中删除我的功能时,产品会正确地添加到购物车中并且没有错误.

我是否需要在插件中而不是在functions.php中添加此功能?


推荐阅读
author-avatar
开心就好一切美好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有