有什么方法可以让woocommerce_update_product操作只触发一次?
我读到过它会触发两次,因为它需要在内部保存一次,以检索图像/变体保存的ID。
但从开发人员的经验来看,我想这真的不是最需要的。
到目前为止,我发现的唯一解决方法是直接在钩子中添加操作并删除它:
add_action('woocommerce_update_product', 'my_product_update', 10, 2);
function my_product_update($product_id, $product){
remove_action('woocommerce_update_product');
// We'll get here only once!
}
字符串
然而,当尝试批量编辑时,这会中断,使得钩子只为第一个产品触发(因为它会在之后被删除!)。
还有什么方法可以解决这个问题?
谢谢你,谢谢
5条答案
按热度按时间hs1rzwqc1#
也许使用WordPress Transient可以帮助。
字符串
gkl3eglg2#
使用全局变量在内存中执行此操作,无需数据库条目:
字符串
9rnv2umw3#
我遇到了同样的问题(实际上我的钩子被触发了5次)。我在最后一条评论中找到了下面的page解决方案。
即使用:
字符串
qrjkbowd4#
更简单的解决方案是设置一个
$_POST
变量,并在函数开始时进行检查。字符串
hec6srdp5#
一个简单快速的解决方案是使用debug_backtrace()php函数。第一次触发使用
debug_backtrace()[8]['class'] === "WC_Meta_Box_Product_Data"
。第二次使用(debug_backtrace()[8]['class'] === "WC_Meta_Box_Product_Images"
。字符串
也许不是最好的解决方案,因为它可以在未来随着Woocommerce更新而改变,但肯定是最快,最简单的解决方案。