wordpress - woocommerce_update_product 操作 – 每次产品更新仅触发一次
问题描述
有哪种解决方法可以使 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!
}
但是,这在尝试进行批量编辑时会中断,从而使钩子仅针对第一个产品触发(因为它随后会被删除!)。
还有什么其他方法可以解决这个问题?
谢谢!
解决方案
也许使用WordPress Transient会有所帮助。
add_action('woocommerce_update_product', 'my_product_update', 10, 2);
function my_product_update($product_id, $product) {
$updating_product_id = 'update_product_' . $product_id;
if ( false === ( $updating_product = get_transient( $updating_product_id ) ) ) {
// We'll get here only once! within 2 seconds for each product id;
// run your code here!
set_transient( $updating_product_id , $product_id, 2 ); // change 2 seconds if not enough
}
}
推荐阅读
- c# - 通过 ajax 将 XML 属性与 Elements 一起发送到 C# 控制器方法并解析以保存
- python - 如何使用 time.sleep() 绘制圆圈 Tkinter?
- javascript - 更改 JavaScript 函数以删除 HTML 标记,除了
- postgresql - 如果为空,则返回替代值?
- javascript - 如何将 javascript 插件添加到 vaadin 网站
- r - 在 R Studio 上使用 API 进行人口普查数据
- python - 'QuerySet' 对象没有属性 '_meta' 模型查询到 JSON 格式
- java - 如何通过使用-MapStruct从源对象复制值来填充目标对象内的地图?
- authentication - 暂时禁用特定 CouchDB 用户的密码
- amazon-s3 - 如何在使用 boto3 create_presigned_post 时添加元数据?