Ich habe ein benutzerdefiniertes Feld auf meinem WooCommerce einzigen Produkt. Es sendet an den Warenkorb Geldbuße, es zeigt auf der Kasse Geldstrafe, es zeigt in der Reihenfolge im Armaturenbrett gut.Hinzufügen von benutzerdefinierten Felddaten zu WooCommerce Auftrag
Was ich jetzt versuche, ist, den Wert als ein benutzerdefiniertes Feld auf der Bestellseite festzulegen, damit ich den Text bei Bedarf ändern kann. Aus irgendeinem Grund funktioniert dieser Schritt nicht, wenn ich das Formular abschicke.
Der Code, den ich in meiner functions.php
Datei:
// Add the field to the product
add_action('woocommerce_before_add_to_cart_button', 'my_custom_checkout_field');
function my_custom_checkout_field() {
echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
echo '<label>fill in this field</label> <input type="text" name="my_field_name">';
echo '</div>';
}
// Store custom field
function save_my_custom_checkout_field($cart_item_data, $product_id) {
if(isset($_REQUEST['my_field_name'])) {
$cart_item_data[ 'my_field_name' ] = $_REQUEST['my_field_name'];
/* below statement make sure every add to cart action as unique line item */
$cart_item_data['unique_key'] = md5(microtime().rand());
}
return $cart_item_data;
}
add_action('woocommerce_add_cart_item_data', 'save_my_custom_checkout_field', 10, 2);
// Render meta on cart and checkout
function render_meta_on_cart_and_checkout($cart_data, $cart_item = null) {
$custom_items = array();
/* Woo 2.4.2 updates */
if(!empty($cart_data)) {
$custom_items = $cart_data;
}
if(isset($cart_item['my_field_name'])) {
$custom_items[] = array("name" => 'My Field', "value" => $cart_item['my_field_name']);
}
return $custom_items;
}
add_filter('woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2);
// Display as order meta
function my_field_order_meta_handler($item_id, $values, $cart_item_key) {
if(isset($values['my_field_name'])) {
wc_add_order_item_meta($item_id, "my_field_name", $values['my_field_name']);
}
}
add_action('woocommerce_add_order_item_meta', 'my_field_order_meta_handler', 1, 3);
/** THIS IS WHERE I'M STUCK **/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error. This one is only requite for companies
if ($_POST['billing_company'])
if (!$_POST['my_field_name'])
$woocommerce->add_error(__('Please enter your XXX.'));
}
// Update the user meta with field value
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta($user_id) {
if ($user_id && $_POST['my_field_name']) update_user_meta($user_id, 'my_field_name', esc_attr($_POST['my_field_name']));
}
// Update the order meta with field value
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta($order_id) {
if ($_POST['my_field_name']) update_post_meta($order_id, 'My Field', esc_attr($_POST['my_field_name']));
}
Screenshot von dem, was zur Zeit passiert:
Was Ich mag würde geschehen:
Jede Hilfe wäre sehr dankbar.
Danke, dies auf jeden Fall mich auf dem richtigen Weg gebracht hat, das letzte, was ich kämpfen werde mit ist die Kasse Verarbeitungsphase. Da mein Feld tatsächlich auf der Produktseite eingefügt wird, wie verarbeite ich den Checkout mit diesem Feld, ohne dass es ein Pflichtfeld ist, wie in der Dokumentation gezeigt? –