2017-09-14 9 views
0

写真をアップロードするたびに、私はwoocommerce製品を作成し、ある時点で未使用の製品がたくさんあるという考えを得るかもしれません。製品IDと画像アップロードリンクをテキストファイルに保存します。アクションなしでwoocommerceカートのコンテンツを取得するには?

私がやっていることは、カートに入れられていない場合は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 

    } 
} 

}

問題Iをもし私が走ればwoocommerce特定のアクションフックの下にこの機能は、言うことができます:

add_action('woocommerce_cart_contents', 'delete_unused_products'); 

その罰金が、私は、私はエラーを取得します(cronを経由)したいと私はこれを実行すると、$ woocommerce-のようなもの>カートが定義されていません。

この作業の仕方を頭で囲むことはできません。おかげさまで

答えて

0

デザインに深刻な欠陥があります。カートはセッションの一部です。買い手がフロントエンドページを表示しているときにアクティブなセッションが存在します。しかし、cronジョブが実行されても、フロントエンドのページを表示しているバイヤーがいないので、アクティブなセッションはなく、したがってカートはありません。

関連する問題