添加操作 woocommerce_add_to_cart 打破网站原始添加到购物车功能
Posted
技术标签:
【中文标题】添加操作 woocommerce_add_to_cart 打破网站原始添加到购物车功能【英文标题】:add action woocommerce_add_to_cart breaks websites original add to cart functionality 【发布时间】:2018-09-09 22:19:58 【问题描述】:我构建了一个 node express API 并让它监听来自 woocommerce_add_to_cart webhook 的 post 请求,但其中的有效负载基本上毫无价值。
body: action: 'woocommerce_add_to_cart', arg:'098uoijo098920sa489983jk'
有没有办法将产品数据添加到这些 webhook 中?如果不想像这样从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'<pre>';var_dump($product_id);echo'</pre>';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);
这导致网站添加到购物车功能中断,因此我的假设是主题 Basel 使用此操作挂钩并将其再次添加到 functions.php 会导致错误。看看老的segment插件,他们也是用这个事件来做这个的,所以这个钩子肯定可以在多个地方使用。
发生错误的代码sn-p:
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中添加这个函数吗?
【问题讨论】:
你可以尝试使用error_log(json_encode($product));
和error_log(json_encode($cart_item_data));
而不是echo
。并检查 wp-content 中的 debug.log 文件以获取输出。
什么是通知?
您是否尝试过完全删除echo'<pre>';var_dump($product_id);echo'</pre>';die();
,ajax 调用需要响应,通过回显它得到意外响应的任何内容。
【参考方案1】:
我认为只是注意到不在那里,所以你需要保护它 你可以试试,
//line where error gets reported
if(b.notices)
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]))
【讨论】:
没有骰子。错误可能发生在链条的上游。我主要是想知道添加 add_to_cart 操作可能导致添加到购物车中断的原因。也许我可以想出一个不同的策略。以上是关于添加操作 woocommerce_add_to_cart 打破网站原始添加到购物车功能的主要内容,如果未能解决你的问题,请参考以下文章