Hinzufügen benutzerdefinierter Daten zu Woocommerce-Bestellartikeln

Lesezeit: 5 Minuten

Benutzer-Avatar
Tostino

Ich habe ein benutzerdefiniertes Plugin, mit dem der Kunde seiner Bestellung benutzerdefinierte Informationen hinzufügen kann.

Der Artikel wird dem Warenkorb hinzugefügt und die benutzerdefinierten Daten werden auf der Warenkorbseite angezeigt. Die benutzerdefinierten Informationen werden jedoch nicht auf die Bestellseite im Backend übertragen. Idealerweise möchte ich auch, dass die benutzerdefinierten Daten der Bestell-E-Mail des Kunden hinzugefügt werden.

Der aktuelle Code lautet wie folgt:

<?php
function wcpc_save_custom_product_field( $cart_item_data, $product_id ) {
    if( isset( $_REQUEST['wcpc_custom_product'] ) ) {
        $cart_item_data[ 'wcpc_custom_product' ] = $_REQUEST['wcpc_custom_product'];
        $cart_item_data[ 'wcpc_custom_price' ] = $_REQUEST['wcpc_custom_price'];
        /* 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', 'wcpc_save_custom_product_field', 10, 2 );

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['wcpc_custom_product'] ) &&  $cart_item['wcpc_custom_product'] != '' ) {
        $custom_items[] = array( "name" => 'Custom', "value" => $cart_item['wcpc_custom_product'] );
    }
    return $custom_items;
}
add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {

//  This is necessary for WC 3.0+
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    foreach ( $cart_object->get_cart() as $key => $value ) {
        if(isset($value['wcpc_custom_price'])) {
            $value['data']->set_price( $value['wcpc_custom_price'] );
        }
    }

}
?>

Ich habe versucht, ein Code-Snippet, das ich online gefunden habe, zu ändern und dem obigen Code hinzuzufügen. Wenn ich dies jedoch implementiere, bricht der Warenkorb zusammen:

function wcpc_order_item_product( $cart_item, $order_item ){

    if( isset( $order_item['wcpc_custom_product'] ) ){
        $cart_item_meta['wcpc_custom_product'] = $order_item['wcpc_custom_product'];
    }

    return $cart_item;

}
add_filter( 'woocommerce_order_item_product', 'wcpc_order_item_product', 10, 2 );

Jede Hilfe wäre sehr willkommen. Ich habe nicht allzu viel Programmiererfahrung und ich kämpfe darum, einen Weg zu finden, dies zum Laufen zu bringen.

Benutzer-Avatar
LoicTheAztec

Der Haken woocommerce_add_order_item_meta wird bald verworfen. Seit Woocommerce 3 ist ein besserer Hook verfügbar. Versuche dies:

add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
    if( ! isset( $values['wcpc_custom_product'] ) ) return;

    if( ! empty( $values['wcpc_custom_product'] ) )
        $item->update_meta_data( 'Custom label', $values['wcpc_custom_product'] );

}

Geben Sie hier die Bildbeschreibung ein

Sie müssen ersetzen ‘Benutzerdefiniertes Etikett‘ neben dem Label, das mit dem Wert angezeigt werden soll…

Auf diese Weise wird Ihr benutzerdefiniertes Feld überall angezeigt, bei Backend- und Frontend-Bestellungen und E-Mail-Benachrichtigungen.

Siehe diesen verwandten Thread, der Ihnen alle Erklärungen gibt:
Woocommerce: Welcher Hook soll anstelle des veralteten „woocommerce_add_order_item_meta“ verwendet werden?

  • Hallo Loic, vielen Dank für deine Antwort. Deine Beiträge haben mir in der Vergangenheit sehr geholfen! Wenn ich den obigen Code kopiere/einfüge, führt dies leider dazu, dass der Einkaufswagen vollständig kaputt geht. Hast du irgendwelche Gedanken, wo ich falsch liege?

    – Tostino

    21. Mai 2018 um 13:22 Uhr


  • Hallo Loic, bitte ignoriere den letzten Beitrag! Es funktioniert jetzt, ich habe Woocommerce aktualisiert. Allerdings wurde ein weiteres Problem erstellt, jetzt bin ich auf der neuesten Version, meine Kategorien sind dupliziert, wie hier zu sehen ist: aurello.co.uk/product-category/splashbacks Wissen Sie, wie ich einen Satz Kategorien ausblenden/entfernen kann, damit nur einer angezeigt wird?

    – Tostino

    21. Mai 2018 um 13:36 Uhr

  • Dies ist nur am vorderen Ende der Website – kein Problem mit der Duplizierung am hinteren Ende

    – Tostino

    21. Mai 2018 um 14:05 Uhr

Benutzer-Avatar
Vaibhav Kumar

Sie können wc_add_order_item_meta() verwenden, um das benutzerdefinierte Meta in der Reihenfolge und im Backend zu speichern

zum Beispiel ::

add_action('woocommerce_add_order_item_meta','add_values_to_order_item_meta',1,2);
if(!function_exists('add_values_to_order_item_meta'))
{
  function add_values_to_order_item_meta($item_id, $values)
  {
        global $woocommerce,$wpdb;
        $user_custom_values = $values['user_custom_data_value'];
        if(!empty($user_custom_values))
        {
            wc_add_order_item_meta($item_id,'user_custom_data',$user_custom_values);  
        }
  }
}

Aus Ihrem bearbeiteten Code.

add_action('woocommerce_add_order_item_meta','add_values_to_order_item_meta',1,2);
if(!function_exists('add_values_to_order_item_meta')) 
{ 
    function add_values_to_order_item_meta($item_id, $values) 
        { 
            global $woocommerce,$wpdb;
            $user_custom_values = $values['wcpc_custom_product'];
            if(!empty($user_custom_values)) {
            wc_add_order_item_meta($item_id,'wcpc_custom_product',$user_custom_values); }
        } 
}

  • Danke für deine Antwort. Muss ich diesen Code bearbeiten, um ihn mit meinem Plugin kompatibel zu machen? Ich habe versucht, einen schnellen Copy/Paste-Job auszuführen. Der Warenkorb funktioniert noch, aber die benutzerdefinierten Daten werden nicht auf der Bestellseite angezeigt.

    – Tostino

    21. Mai 2018 um 10:32 Uhr

  • Sie müssen dies nach Ihren Bedürfnissen bearbeiten, dies ist nur ein Beispiel.

    – Vaibhav Kumar

    21. Mai 2018 um 10:34 Uhr

  • Referenzlink stackoverflow.com/questions/45363969/…

    – Vaibhav Kumar

    21. Mai 2018 um 10:46 Uhr

  • Danke! Ok, also habe ich den Code geändert zu: add_action(‘woocommerce_add_order_item_meta’,’add_values_to_order_item_meta’,1,2); if(!function_exists(‘add_values_to_order_item_meta’)) { function add_values_to_order_item_meta($item_id, $values) { global $woocommerce,$wpdb; $user_custom_values ​​= $Werte[‘wcpc_custom_product’]; if(!empty($user_custom_values)) { wc_add_order_item_meta($item_id,’wcpc_custom_product’,$user_custom_values); } } }

    – Tostino

    21. Mai 2018 um 11:16 Uhr


  • Es funktioniert, aber wenn der Kunde die Seite mit den Bestelldetails erreicht, wird Folgendes angezeigt: Produktgesamttest × 1 wcpc_custom_product: Breite: 50, Länge: 50, Klammern: , 0,00 £

    – Tostino

    21. Mai 2018 um 11:18 Uhr

1355400cookie-checkHinzufügen benutzerdefinierter Daten zu Woocommerce-Bestellartikeln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy