Ersetzen Sie die Rückstandsbenachrichtigung durch die Anzahl der Rückstandsbestellungen für jeden Warenkorbartikel auf der WooCommerce-Warenkorbseite

Lesezeit: 3 Minuten

Benutzer-Avatar
LouMJ

Ich versuche, die Rückstandsbenachrichtigung auf der Warenkorbseite in WooCommerce so zu bearbeiten, dass die Anzahl der Rückstandsbestellungen für jeden Warenkorbartikel angezeigt wird (ich verwende Variationen).

Wenn also ein Warenkorbartikel eine Menge von 7 hat, aber der Bestand 5 beträgt, sollte der Rückstand 2 betragen. (Diese Informationen werden standardmäßig in Woocommerce in Bestell-E-Mails angezeigt, aber nicht auf der Warenkorbseite, bevor die Bestellung aufgegeben wird).

Der folgende Code funktioniert, solange sich nur 1 Warenkorbartikel im Warenkorb befindet. Wenn es jedoch mehr als 1 Artikel im Warenkorb gibt, wird die gleiche Anzahl von Lieferrückständen für alle Artikel im Warenkorb mit Lieferrückstand zurückgegeben.

Weiß jemand, was ich ändern muss, damit die Rückstandsbenachrichtigung die korrekte Anzahl von Rückständen für jeden einzelnen Warenkorbartikel mit Rückständen anzeigt – egal, wie viele Warenkorbartikel mit Rückständen sich im Warenkorb befinden?

Ich verwende den Filterhaken woocommerce_cart_item_backorder_notification

    function backorder_info() {
  
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        // Get an instance of the WC_Product Object
        $product = $cart_item['data'];
        // Get stock quantity
        $stock_qty = $product->get_stock_quantity();
        // get cart item quantity
        $item_qty  = $cart_item['quantity'];
        // Calculate number of backorders
        $backorder_qty = $item_qty - $stock_qty;
        $html="<p class="backorder_notification">" .__( " " .$backorder_qty. " i restordre","woocommerce").'</p>';

      // return backorder quantity
    return $html;
    }   
}


// Display backorder notification on cart page
add_filter( 'woocommerce_cart_item_backorder_notification', 'custom_cart_item_backorder_notification', 10, 2 );

function custom_cart_item_backorder_notification($html, $product_id) {
    
    $html = backorder_info();
    return $html;   
}

Benutzer-Avatar
7uc1f3r

Wie Sie sehen können woocommerce_cart_item_backorder_notification Filter Hook enthält die productID als zweites Argument.

Nur das ist die parentIDund daher bei variablen Produkten nicht so einfach zu bestimmen, welche Variante (variantID) befindet sich derzeit im Warenkorb.

Deshalb werden wir zunächst durch den folgenden Code sicherstellen, dass nicht die parentID aber das echte productID wird an die übergeben woocommerce_cart_item_backorder_notification Filterhaken

function filter_woocommerce_cart_item_product_id( $cart_item_product_id, $cart_item, $cart_item_key ) {
    // Return real product ID instead of parent ID
    $cart_item_product_id = $cart_item['variation_id'] > 0 ? $cart_item['variation_id'] : $cart_item['product_id'];

    return $cart_item_product_id;
}
add_filter( 'woocommerce_cart_item_product_id', 'filter_woocommerce_cart_item_product_id', 10, 3 );

Und dann bekommt man, das zu ändern backorder_notification basierend auf der Anzahl der Nachbestellungen

function custom_cart_item_backorder_notification( $html, $product_id ) {
    // Get cart items quantities
    $cart_item_quantities = WC()->cart->get_cart_item_quantities();

    // Product quantity in cart
    $product_qty_in_cart = isset( $cart_item_quantities[ $product_id ] ) ? $cart_item_quantities[ $product_id ] : 0;
    
    // Get product
    $product = wc_get_product( $product_id );
    
    // Get stock quantity
    $stock_qty = $product->get_stock_quantity();
    
    // Still in stock
    if ( $stock_qty >= 1 ) {
        // Calculate number of backorders
        $backorder_qty = $product_qty_in_cart - $stock_qty;     
    } else {
        // Calculate number of backorders
        $backorder_qty = $product_qty_in_cart;          
    }
    
    // Output
    $html="<p class="backorder_notification">" . sprintf( __( '%s in backorder', 'woocommerce' ), $backorder_qty ) . '</p>';

    return $html;
}
add_filter( 'woocommerce_cart_item_backorder_notification', 'custom_cart_item_backorder_notification', 10, 2 );

1009460cookie-checkErsetzen Sie die Rückstandsbenachrichtigung durch die Anzahl der Rückstandsbestellungen für jeden Warenkorbartikel auf der WooCommerce-Warenkorbseite

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

Privacy policy