2017-08-09 34 views
1

我正在開發一個週期租用站點,用戶在其中選擇從開始日期到結束日期範圍(以天爲單位)。我使用wc_add_order_item_meta()函數作爲訂單的元數據存儲該數據。如何從任何地方更新訂單項元數據?

然後,我想給用戶一個功能,就像他可以通過訂單頁面更改或延長日期。這也完成了,我已經創建了一個模式,並添加了一個關於改變模態日期的Ajax請求。

現在,我使用AJAX將數據發送到functions.php,並且我使用wc_update_order_item_meta()來更新元數據。

這裏是我的功能看起來像:

add_action('wp_ajax_update_date_picker', 'update_date_picker'); 

function update_date_picker() { 
    $p_da = $_POST['p_date']; 
    $r_da = $_POST['r_date']; 
    $t_dy = $_POST['t_days']; 
    $order_id = $_POST['order_id']; 

    $order = wc_get_order($order_id); 

    foreach ($order->get_items() as $item_id => $item_obj) { 

     $pd = wc_update_order_item_meta($item_id, 'pickup_hidden_datetime', $p_da); 
     $rd = wc_update_order_item_meta($item_id, 'return_hidden_datetime', $r_da); 
     $td = wc_update_order_item_meta($item_id, 'return_hidden_days', $t_dy); 

     if($pd&&$rd&&$td){ 
      echo "Nice work, Bilal"; 
     } 
     die(); 
    } 

} 

這是更新過,但不是在所有的地方。我的意思是,它給了我正確的迴應,當我刷新時,它也提供了更新的數據,但是當我瀏覽視圖項目頁面時,它僅顯示舊數據而不是更新數據。即使我查看管理員的訂單,也會顯示舊的元數據。

任何想法將不勝感激,感謝提前。

+0

什麼版本是你的woocommerce? – Reigel

+0

@Reigel版本是3.1.1 –

回答

1

我認爲這是因爲WooCommerce有緩存...嘗試這樣的事情。

add_action('wp_ajax_update_date_picker', 'update_date_picker'); 

function update_date_picker() { 
    $p_da = $_POST['p_date']; 
    $r_da = $_POST['r_date']; 
    $t_dy = $_POST['t_days']; 
    $order_id = $_POST['order_id']; 

    $order = wc_get_order($order_id); 

    foreach ($order->get_items() as $item_id => $item_obj) { 

     $pd = wc_update_order_item_meta($item_id, 'pickup_hidden_datetime', $p_da); 
     $rd = wc_update_order_item_meta($item_id, 'return_hidden_datetime', $r_da); 
     $td = wc_update_order_item_meta($item_id, 'return_hidden_days', $t_dy); 

     if($pd&&$rd&&$td){ 
      echo "Nice work, Bilal"; 
     } 
    } 
    clean_post_cache($order->get_id()); 
    wc_delete_shop_order_transients($order); 
    wp_cache_delete('order-items-' . $order->get_id(), 'orders'); 
    die(); 
} 
相關問題