---- ---- aktualisieren
Der folgende Code funktioniert, aber nur, wenn Daten vorgelegt!
Die einzigen Möglichkeiten sind Javascript/jQuery Form Ereigniserkennung auf Kasse Feldern und Worpress Ajax:
- Ajax einige Sitzungs Transienten verbunden Mit funktioniert (wie im Code unten).
- Mit (Javascript) Webspeicher:
localStorage
, sessionStorage
...
ich einige wirklich interessanten Code in this thread gefunden haben, die Sitzungen Transienten verwendet Kasse Daten zu speichern.
// 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');
diesen Code an die in Ihrem aktiven Kind Thema oder Thema befindet functions.php
Datei hinzufügen.
Erklärungen des Autors:
1. Speichern Sie die Formulardaten:
Die erste Funktion set_persitent_checkout
Haken in woocommerce_after_checkout_validation
.
Wenn dieser Hook ausgelöst wird, werden alle aktuellen Formulardaten als WordPress-Transient über die WC_Session_Handler
Klasse gespeichert (die vor kurzem in Version 2.5 aktualisiert wurde, um wesentlich effizienter zu sein).
2. Überprüfen Sie die gespeicherten Daten auf reload:
Als nächstes werden wir woocommerce_checkout_get_value with get_persitent_checkout
Haken. Wie der Name schon sagt, überprüfen wir hier die Session-Transienten und geben, falls gefunden, alle Übereinstimmungen für das aktuelle Feld zurück.
3. Make ship_to_different_address
Arbeit:
Der einzige schwierig war das ship_to_different_address
Feld, das seinen Wert durch eine andere Methode bekommt.
Um dies zu umgehen wurde die endgültige Funktion hinzugefügt. Dies funktioniert genau wie die vorherige Funktion, aber hakt in woocommerce_ship_to_different_address_checked
ein.
Da haben Sie es.Es wäre nett, wenn die Daten nach jedem Feldupdate beim Checkout gespeichert würden, aber der Haken bei woocommerce_after_checkout_validation
genug brennt, um die Daten an allen wichtigen Punkten zu erfassen.
Ja, es verwendet [tag: LocalStorage] HTML5 Web Storage API, wie ich in meiner aktualisierten Antwort vorgeschlagen habe, aber Sie müssen, um dies zu erreichen, auch einige [tag: php]/'wp_ajax'. Ein echtes Entwicklungskram. – LoicTheAztec