如何在不采取行动的情况下获得WooCommerce购物车内容?

时间:2017-09-14 作者:user385917

每次上传照片,我都会创建一个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没有定义。

我不知道该怎么做。谢谢

1 个回复
最合适的回答,由SO网友:Shawn H 整理而成

未测试,但如果使用

WC()->cart->get_cart()
要检索购物车内容而不是全局$woocommerce对象?

然而,我认为问题是cart内容需要用户的会话,通过cron访问它将不知道用户是谁。您可能需要开始通过$wpdb直接查询数据库,以便在特定用户会话之外找到此信息。

结束