【发布时间】:2021-09-17 05:06:13
【问题描述】:
我正在为客户制作一个与 WooCommerce 集成的插件,当在购物车和结帐页面上选择本地取货运输方式时,我需要添加一个通知,wc_add_notice。
我尝试在woocommerce_shipping_method_chosen 操作中添加一个钩子,如下所示:
add_action("woocommerce_shipping_method_chosen", "local_pickup_notice", 10, 1);
function local_pickup_notice($chosen_method){
$woocommerce = WC();
$shipping_method = $woocommerce->session->get("chosen_shipping_methods")[0];
if($shipping_method == "local_pickup"){
wc_add_notice(__("Local pickup shipping", "myplugin"), "notice");
}
}
但是,它没有用。选择本地取货时(以及更改送货方式时),购物车或结帐页面上不会显示任何通知。
谁能帮我解决这个问题?
-- 编辑 1--
我注意到woocommerce_shipping_method_chosen 没有被触发,所以我将动作挂钩更改为woocommerce_cart_calculate_fees。现在,动作被触发了,但仍然没有显示消息。
还尝试从wc_add_notice更改为wc_print_notice,但没有成功。
-- 编辑 2--
我的错误在于检查$shipping_method,因为我有两个local_pickup 选项。这样,存储在$shipping_method 上的字符串是local_pickup:<option_id> 而不仅仅是local_pickup。因此,将if 语句更改为使用strpos 而不是== 使其工作。
目前的结果是:
add_action("woocommerce_cart_calculate_fees", "local_pickup_notice", 10, 1);
function local_pickup_notice($cart){
$woocommerce = WC();
$shipping_method = $woocommerce->session->get("chosen_shipping_methods")[0];
wc_clear_notices();
if(strpos($shipping_method, "local_pickup") !== false){
wc_add_notice(__("Local pickup shipping", "myplugin"), "notice");
}
}
现在,它正在工作,但仅在加载购物车/结帐页面时。下一个挑战是在 AJAX 调用上进行这项工作,以便在用户更改运输方式时显示通知。
如果有人知道如何在 WooCommerce ajax 上添加通知,请告诉我
【问题讨论】:
-
对我的回答的一些反馈总是很感激。请阅读What should I do when someone answers my question? 确定答案是否有帮助,如果我的答案有效,您可以accept 它和/或upvote 它。 (如果您获得了适当的投票特权)
标签: ajax woocommerce cart checkout shipping-method