2016-04-25 68 views
1

我正在嘗試構建一個插件,它將一些自定義數據添加到WooCommerce訂單中。

本質上,我從自定義按鈕中加載了一個特定的產品頁面,其中有一個url變量集(& my_post_var = {INTEGER})。然後在產品頁面中處理該變種,在WordPress中顯示一些可用的特定信息,並按預期工作。

從此後,按下添加到購物車後,一些自定義數據被推送到購物車會話。 AJAX jQuery和PHP回調都正確運行,jQuery響應也使用PHP $ _SESSION變量正確填充。

的問題是在這之後,當購物車頁面顯示,其中顯示的數據是從以前& my_post_var = {整數}的一個,而不是被傳遞的最後一個值。

我沒有使用任何緩存插件,這是一個本地開發wordpress安裝。

有人可以幫我指出什麼可能是錯誤嗎?

這是代碼的一部分可能是更中肯:

function __construct() { 

    // AJAX callback  
    function my_ajax_custom_data_callback_inline() { 
     session_start(); 
     print_r ($_POST); 

     write_log ('Data inside AJAX callback: '); 
     write_log (' - DEBUG: _POST data: '. $_POST['my_post_data'][0]); // This outputs the expected value 

     $_SESSION['my_meta_data'] = $_POST['my_post_data']; 
     print_r ($_SESSION); 

     write_log (' - DEBUG: _SESSION DATA: ' . $_SESSION['my_meta_data'][0]); // This outputs the expected value 

     wp_die(); 
    } 

    // AJAX hooks 
    add_action('wp_ajax_' . 'my_custom_data', 'my_ajax_custom_data_callback_inline', 1); 
    add_action('wp_ajax_nopriv_' . 'my_custom_data', 'my_ajax_custom_data_callback_inline', 1); 


    if (isset($_SESSION['my_meta_data'])) { // this is not being verified as TRUE 

     add_filter('woocommerce_add_cart_item_data', 'my_add_cart_item_data', 10, 2); 

     add_filter('woocommerce_get_cart_item_from_session', 'my_get_cart_items_from_session', 10, 3); 

     add_filter('woocommerce_get_item_data', 'my_get_item_data', 10, 2); 

     add_action('woocommerce_add_order_item_meta', 'my_add_values_to_order_item_meta',10,2); 

     add_action('woocommerce_before_cart_item_quantity_zero', 'my_remove_user_custom_data',10,1); 

    } 

} 

非常感謝您

回答

0

我認爲我找到了一個方法來整理這個,如果事實證明不穩定的我」會回到問題。

基本上我是使兩個不同在session_start()呼叫,一個Ajax回調內(如見於OP)和另一個woocommerce_add_cart_item_data濾波器函數內。

擺脫這兩個電話和__construct()開始之後一個函數調用替換它們使得它應該它的工作,雖然我不知道是否有任何與此顯著警告。