Ich verwende WooCommerce mit WordPress und habe dem Checkout einige benutzerdefinierte Felder hinzugefügt:
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
$extra_fields = array('job_title', 'company', 'telephone', 'occupation');
foreach($extra_fields as $key => $value) {
woocommerce_form_field($value, array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __($label),
'value' => '',
), $checkout->get_value( $value ));
}
}
Jetzt erscheinen diese derzeit in der Kasse in Ordnung, nicht sicher, ob sie verwendet werden woocommerce_after_order_notes
hat in diesem fall recht. Ich habe auch einige benutzerdefinierte Felder zum Benutzer-Meta hinzugefügt, die den Feldern entsprechen, die der Kasse hinzugefügt wurden – die alle auf der Benutzerprofilseite angezeigt werden:
function add_contact_methods( $contactmethods ) {
$contactmethods['job_title'] = 'Job Title';
$contactmethods['company'] = 'Company Name';
$contactmethods['telephone'] = 'Telephone';
$contactmethods['occupation'] = 'Occupation';
$contactmethods['refer'] = 'How you heard about us?';
return $contactmethods;
}
add_filter('user_contactmethods','add_contact_methods',10,1);
Wie Sie sich vorstellen können, funktioniert es gut, wenn ich eines dieser Felder auf einer beliebigen Profilseite aktualisiere, aber was ich anscheinend nicht tun kann, ist, das Benutzer-Meta zu aktualisieren, wenn ein neuer Benutzer einen Kauf tätigt, es aktualisiert nicht das Benutzer-Meta für diese Felder in der Datenbank.
Ich verstehe viel darüber, wie das funktioniert, und verstehe, dass ich mich in einen Woocommerce-Prozess einklinken muss, um die Felder in den Prozess einzufügen. Also habe ich diesen Code auch in meine Funktionen eingefügt:
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
global $extra_fields;
foreach($extra_fields as $key => $value) {
if ($_POST[$value]) update_user_meta( $user_id, $value, esc_attr($_POST[$value]));
}
}
Der Haken an der Sache ist, dass dies funktioniert, wenn ein Benutzer, der bereits als Mitglied angemeldet ist, einen erneuten Kauf tätigt und durch die Kasse geht – der Grund, warum dies funktioniert, ist, weil $user_id
existiert bereits, aber wenn ein neuer Benutzer auscheckt, existiert er noch nicht als Benutzer, daher kann die Funktion das Benutzer-Meta von nicht aktualisieren NIL
wo $user_id
ist nicht vorhanden.
Meine Frage ist, wie ich mich in den Checkout-Prozess einklinke, vermutlich NACHDEM der Benutzer angelegt wurde, damit ich das bekommen kann $user_id
zurückgegeben, und führen Sie diese Funktion aus, um das Benutzer-Meta zu aktualisieren.
Eine kanonische Antwort finden Sie hier.
– Steve
24. April 2016 um 11:41 Uhr