2016-06-11 17 views
2

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:

Screenshot of what currently happens



Was Ich mag würde geschehen:

what I would like to happen


Jede Hilfe wäre sehr dankbar.

Antwort

4

Aktualisiert: Kompatibilität mit WooCommerce Version 3+

Sie haben die Funktion fehlt in der Größenordnung bearbeiten Seite dieses benutzerdefinierte Feld Wert anzuzeigen:

/** 
* Display field value on the order edit page 
*/ 
add_action('woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1); 
function my_custom_checkout_field_display_admin_order_meta($order){ 
    $order_id = method_exists($order, 'get_id') ? $order->get_id() : $order->id; 
    echo '<p><strong>'.__('My Field Name').':</strong> ' . get_post_meta($order_id, 'my_field_name', true) . '</p>'; 
} 

Auf der Referenz Link unten haben Sie alle originalen wooThemes funktionierende Code-Schnipsel. Es ist ein exzellentes, voll funktionsfähiges Tutorial.

Referenz: [Anpassen Kasse Felder mit Aktionen und Filter] [1]


Edit: Lassen Sie sich auf eine benutzerdefinierte Label angezeigt mit Ihren benutzerdefinierten Feldwert in Bestellartikel meta

erhalten Sie ein benutzerdefiniertes Etikett wie "MY Feldname" mit Ihrem benutzerdefinierten Feld Wert (in Reihenfolge Elemente meta) anstelle einer Schnecke wie m y_field_name, beziehen sich auf diese Stufen:

+0

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? –

Verwandte Themen