2016-05-26 10 views
7

Gibt es einen einfachen Weg oder ein Plugin, um Checkout-Informationen zu speichern, die vom Kunden eingegeben werden, nachdem er/sie gegangen ist und zurückkommt?WooCommerce: Wie kann man die Checkout-Informationen behalten, wenn der Kunde verlässt und dann zurückkommt?

This plugin behält "Felder Informationen für Kunden, wenn sie hin und her navigieren" aber es hat ziemlich viele der letzten schlechten Bewertungen, so glaube ich nicht, dass ich das für die Produktion verwenden werde. Irgendwelche alternativen Vorschläge?

Antwort

0

https://github.com/kugaevsky/jquery-phoenix/ scheint die perfekte Antwort auf dieses Problem zu sein.

+1

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

7

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

+0

Dank @LoicTheAztec. Scheint aber keine Wirkung zu haben: Was ich in die Felder eingib, ist weg, wenn ich eine andere Seite der Seite besuche und zur Checkout-Seite zurückkehre. – drake035