每次上传照片,我都会创建一个woocommerce产品,你可能会想到,在某个时候,我会有很多未使用的产品。我将产品id和图像上传链接保存到文本文件中。
我想做的是在24小时后删除一个产品,如果它不在购物车中,我想用cron来完成这项工作。
我的问题是,我不知道如何使全局woocommerce属性也可用于定时事件(cron)。
以下是我设置计划事件的方式:
add_action(\'daily_product_removal\', \'delete_unused_products\' );
function activate() {
wp_schedule_event( time(), \'daily\', \'daily_product_removal\' );
}
function deactivate() {
wp_clear_scheduled_hook(\'daily_product_removal\');
}
车内推送功能:
function woo_in_cart($product_id) {
global $woocommerce;
foreach($woocommerce->cart->get_cart() as $key => $val ) {
$_product = $val[\'data\'];
if($product_id == $_product->id ) {
return true;
}
}
return false;
}
主要功能:
function delete_unused_products() {
$woocommerce = new Client(
\'site_link\',
\'ck_numbers\',
\'cs_numbers\',
[
\'wp_api\' => true,
\'version\' => \'wc/v1\',
]
);
$myFile = "products.txt";
$myFileLink = fopen($myFile, \'r\');
$products = [];
while(!feof($myFileLink)) {
$this_line = fgets($myFileLink);
array_push($products,$this_line);
}
fclose($myFileLink);
foreach($products as $i => $item) {
$product = unserialize($item);
$creation_date_from_file = $product->creation_date;
$product_id = $product->product_id;
$createDate = strtotime($creation_date_from_file);
if (strtotime("$creation_date_from_file +1 day") <= time() && !woo_in_cart($product_id)) { // created more than 24 hours ago and is not added in cart
$results = $woocommerce->delete(\'products/\' . $product_id, [\'force\' => true]);
if (file_exists($item->local_url)) {
unlink($item->local_url);
}
if (file_exists($item->local_mockup_url)) {
unlink($item->local_url);
}
file_put_contents($myFile, str_replace($i . "\\r\\n", "", file_get_contents($myFile))); // delete the line
}
}
}
我的问题是,如果我在woocommerce特定的操作挂钩下运行此函数,可以这样说:
add_action( \'woocommerce_cart_contents\', \'delete_unused_products\' );
这很好,但如果我按照自己的意愿(通过cron)运行它,就会出现错误,比如$woocommerce->cart没有定义。
我不知道该怎么做。谢谢