随着每张照片的上传,我创建了一个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-&gt; cart没有定义。
无法解决如何使这项工作。 感谢。
答案 0 :(得分:0)
您的设计存在严重缺陷。购物车是会话的一部分。买方正在查看前端页面时存在活动会话。但是,当运行cron作业时,没有买家查看前端页面,因此没有活动会话,因此没有购物车。