---- ---- 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.
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