【问题标题】:How to get woocommerce cart content without an action?如何在不采取行动的情况下获取 woocommerce 购物车内容?
【发布时间】:2018-02-23 18:31:29
【问题描述】:

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

我无法理解如何使这项工作。 谢谢。

【问题讨论】:

    标签: php wordpress woocommerce cron


    【解决方案1】:

    您的设计存在严重缺陷。购物车是会话的一部分。当买家查看前端页面时,存在活动会话。但是,当运行 cron 作业时,没有买家查看前端页面,因此没有活动会话,因此没有购物车。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-10
      • 2017-04-27
      • 2011-02-03
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多