2016-05-26 48 views

risposta

0

https://github.com/kugaevsky/jquery-phoenix/ sembra essere la risposta perfetta a questo problema.

+1

Sì, sta usando [tag: LocalStorage] utilizzando l'API di archiviazione Web HTML5 come suggerito nella mia risposta aggiornata, ma è necessario, per ottenere ciò, alcuni [tag: php]/'wp_ajax'. Una vera roba di sviluppo. – LoicTheAztec

7

---- ---- Aggiornamento

Il seguente codice funziona, ma solo se i dati è presentata!

Gli unici modi possibili sono JavaScript jQuery rilevamento/evento modulo a campi verifica ed worpress Ajax:

  • Utilizzo ajax collegato ad alcuni transienti sessione funzionano (come nel codice di seguito).
  • Utilizzando (javascript) Web Storage: localStorage, sessionStorage ...

ho trovato un po 'di vero e proprio codice di interessante in this thread che utilizza sessioni transitori per memorizzare i dati di pagamento.

// this function sets the checkout form data as session transients whenever the checkout page validates 
function set_persitent_checkout ($a) { 
    $arr = array(); 
    foreach ($a as $key => $value) 
     if (! empty($value)) 
      $arr[$key] = $value; 

    WC()->session->set('form_data', $arr); 
    return $a; 
} 
add_action('woocommerce_after_checkout_validation', 'set_persitent_checkout'); 


// this function hooks into woocommerce_checkout_get_value to substitute standard values with session values if present 
function get_persistent_checkout ($value, $index) { 
    $data = WC()->session->get('form_data'); 
    if (! $data || empty($data[$index])) 
     return $value; 
    return is_bool($data[$index]) ? (int) $data[$index] : $data[$index]; 
} 
add_filter('woocommerce_checkout_get_value', 'get_persistent_checkout', 10, 2); 


// This is a fix for the ship_to_different_address field which gets it value differently if there is no POST data on the checkout 
function get_persitent_ship_to_different ($value) { 
    $data = WC()->session->get('form_data'); 
    if (! $data || empty($data['ship_to_different_address'])) 
     return $value; 

    return is_bool($data['ship_to_different_address']) ? (int) $data['ship_to_different_address'] : $data['ship_to_different_address']; 
} 
add_action('woocommerce_ship_to_different_address_checked', 'get_persitent_ship_to_different'); 

Aggiungere questo codice al file functions.php situato nel tema bambino attivo o tema.

spiegazioni da parte dell'autore:

1. Salvare i dati del modulo:

La prima funzione set_persitent_checkout ganci in woocommerce_after_checkout_validation.

Ogni volta che il gancio viene attivato, tutti i dati del modulo corrente vengono salvati come transitori di WordPress tramite la classe WC_Session_Handler (che è stata recentemente aggiornata nella versione 2.5 per essere molto più efficiente).

2. Controllare i dati salvati su reload:

Poi abbiamo gancio woocommerce_checkout_get_value with get_persitent_checkout. Come suggerisce il nome, qui controlliamo i transienti della sessione e restituiamo eventuali corrispondenze per il campo corrente se trovato.

3. Esegui ship_to_different_address lavoro:

L'unica difficoltà era il campo ship_to_different_address, che prende il suo valore attraverso un metodo diverso.

Per aggirare questo è stata aggiunta la funzione finale. Funziona esattamente come la funzione precedente, ma si aggancia allo woocommerce_ship_to_different_address_checked.

Là ce l'hai.Sarebbe bello se i dati fossero stati salvati dopo ogni aggiornamento di campo al momento del pagamento, ma il gancio woocommerce_after_checkout_validation si accende abbastanza per acquisire i dati in tutti i punti importanti.

+0

Grazie a @LoicTheAztec. Non sembra avere alcun effetto però: quello che ho inserito nei campi è scomparso una volta che visito un'altra pagina del sito e torno alla pagina di checkout. – drake035