当使用脚本函数(通过 cron)更新产品时,是否有任何方法可以识别或跟踪编辑脚本的函数?
When products are being updated using a script function (by a cron), is there any way to identify or trace the function that editted the script?
这个问题的目标是找到任何东西,通过它可以识别一个 ID 或任何东西,通过它可以跟踪正在编辑或更新由 cron 自动导入到商店的所有产品的价格(比如说 1.25 倍)。
每次函数更新产品时,它可以例如在某处存储此给定函数最后一次编辑产品的值。
到目前为止,我已经搜索了一些选项,我找到的选项如下:
1) get_the_author_meta("display_name");
2) get_the_modified_author();
但是,none 这些选项很有用,或者我根本无法使它们回显任何内容。
预期结果为:
1) 要找到一种方法,如何通过留下痕迹或 ID 来跟踪功能更新 posts(产品),这将记录执行最后一次编辑的给定功能。
2) 找到一种方法来识别每个新创建的跟踪 post 并能够将其与其他功能一起使用。
最终目标是:为了确保当一个函数运行时假设有 4000 个产品并且该函数由于某些外部原因而没有完成 - 它不会产生另一个从一开始就通过,但只改变它还没有改变的产品。
如果该过程未完成,则该功能将由 cron 从头开始重新启动(直到完成)- 目前会导致问题 - 因为已经更新了 1,25 倍的产品价格正在更新以同样的因素再次出现。
有人有什么想法吗?
代码:
private function set_custom_price($product) {
if (!$product->exists()) {
return false;
}
$product_price = $product->get_regular_price();
if (($product_price > 0) && ($product_price < 401)) {
$product->set_regular_price(ceil(($product_price + ($product_price*(0.5)))/10) *10-1);
} elseif (($product_price > 400) && ($product_price < 801)) {
$product->set_regular_price(ceil(($product_price + 120)/10) *10-1);
} elseif (($product_price > 800) && ($product_price < 1101)) {
$product->set_regular_price(ceil(($product_price + 150)/10) *10-1);
} elseif (($product_price > 1100) && ($product_price < 1601)) {
$product->set_regular_price(ceil(($product_price + 200)/10) *10-1);
} elseif (($product_price > 1600) && ($product_price < 2001)) {
$product->set_regular_price(ceil(($product_price + 220)/10) *10-1);
} elseif (($product_price > 2000) && ($product_price < 5001)) {
$product->set_regular_price(ceil(($product_price + ($product_price*(0.15)))/10) *10-1);
}
$product->save();
// HERE SOME CODE NEEDED TO REGISTER TRACE??
}
你可以使用这样的东西:
$product_id = $product->ID;
$last_changed = get_post_meta( $product_id, 'custom_product_last_change', true );
$last_changed_timestamp = strtotime($last_changed);
$current_datetime = strtotime(date('m/d/Y h:i:s a', time()));
// Check if change date is in last 24 hours ( you can change that to what ever you want, last week, last month..etc )
if($last_changed_timestamp > $current_datetime - 86400){
update_post_meta( $product_id, 'custom_product_last_change', date('m/d/Y h:i:s a', time()) );
// Do the changes here
}
这个问题的目标是找到任何东西,通过它可以识别一个 ID 或任何东西,通过它可以跟踪正在编辑或更新由 cron 自动导入到商店的所有产品的价格(比如说 1.25 倍)。
每次函数更新产品时,它可以例如在某处存储此给定函数最后一次编辑产品的值。
到目前为止,我已经搜索了一些选项,我找到的选项如下:
1) get_the_author_meta("display_name"); 2) get_the_modified_author();
但是,none 这些选项很有用,或者我根本无法使它们回显任何内容。
预期结果为:
1) 要找到一种方法,如何通过留下痕迹或 ID 来跟踪功能更新 posts(产品),这将记录执行最后一次编辑的给定功能。
2) 找到一种方法来识别每个新创建的跟踪 post 并能够将其与其他功能一起使用。
最终目标是:为了确保当一个函数运行时假设有 4000 个产品并且该函数由于某些外部原因而没有完成 - 它不会产生另一个从一开始就通过,但只改变它还没有改变的产品。
如果该过程未完成,则该功能将由 cron 从头开始重新启动(直到完成)- 目前会导致问题 - 因为已经更新了 1,25 倍的产品价格正在更新以同样的因素再次出现。
有人有什么想法吗?
代码:
private function set_custom_price($product) {
if (!$product->exists()) {
return false;
}
$product_price = $product->get_regular_price();
if (($product_price > 0) && ($product_price < 401)) {
$product->set_regular_price(ceil(($product_price + ($product_price*(0.5)))/10) *10-1);
} elseif (($product_price > 400) && ($product_price < 801)) {
$product->set_regular_price(ceil(($product_price + 120)/10) *10-1);
} elseif (($product_price > 800) && ($product_price < 1101)) {
$product->set_regular_price(ceil(($product_price + 150)/10) *10-1);
} elseif (($product_price > 1100) && ($product_price < 1601)) {
$product->set_regular_price(ceil(($product_price + 200)/10) *10-1);
} elseif (($product_price > 1600) && ($product_price < 2001)) {
$product->set_regular_price(ceil(($product_price + 220)/10) *10-1);
} elseif (($product_price > 2000) && ($product_price < 5001)) {
$product->set_regular_price(ceil(($product_price + ($product_price*(0.15)))/10) *10-1);
}
$product->save();
// HERE SOME CODE NEEDED TO REGISTER TRACE??
}
你可以使用这样的东西:
$product_id = $product->ID;
$last_changed = get_post_meta( $product_id, 'custom_product_last_change', true );
$last_changed_timestamp = strtotime($last_changed);
$current_datetime = strtotime(date('m/d/Y h:i:s a', time()));
// Check if change date is in last 24 hours ( you can change that to what ever you want, last week, last month..etc )
if($last_changed_timestamp > $current_datetime - 86400){
update_post_meta( $product_id, 'custom_product_last_change', date('m/d/Y h:i:s a', time()) );
// Do the changes here
}