Zeigen Sie die Nachricht unter dem Produktnamen auf der WooCommerce-Warenkorbseite an, wenn der Benutzer das Produkt zuvor gekauft hat

Lesezeit: 3 Minuten

Zeigen Sie die Nachricht unter dem Produktnamen auf der WooCommerce Warenkorbseite
marwah

Ich möchte eine Benachrichtigung auf der Warenkorbseite anzeigen, wenn der angemeldete Benutzer das Produkt bereits zuvor gekauft hat.

Auf der Checkout-Seite konnte ich es anzeigen, indem ich dies hinzufügte checkout/review-order.php um Linie Nr. 31

Bildschirmfoto

if( is_user_logged_in() ) {
    $user = wp_get_current_user();
}

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );

    if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_checkout_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
        ?>
        <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">
            <td class="product-name">
                <?php echo apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . '&nbsp;'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                <?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '&times;&nbsp;%s', $cart_item['quantity'] ) . '</strong>', $cart_item, $cart_item_key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                <?php echo wc_get_formatted_cart_item_data( $cart_item ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                <?php
                    // Here is your code -- Start
                    if( is_user_logged_in() && wc_customer_bought_product( $user->user_email, $user->ID, $_product->get_id() ) ) {
                        echo apply_filters( 'woocommerce_checkout_cart_alredy_bought', '<div class="user-bought">' . sprintf( "Hi %s you already purchased in the past.", $user->first_name ) . '</div>' );
                    }
                    // Here is your code -- End
                ?>
            </td>
            <td class="product-total">
                <?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
            </td>
        </tr>
        <?php
    }
}

Zur Warenkorbseite in cart/cart.php um welche Zeilennummer muss ich diesen Code hinzufügen?

Bildschirmfoto

1647343746 628 Zeigen Sie die Nachricht unter dem Produktnamen auf der WooCommerce Warenkorbseite
7uc1f3r

Anstatt die Vorlagendateien zu überschreiben, können Sie die woocommerce_after_cart_item_name Aktionshaken

Sie erhalten also:

function action_woocommerce_after_cart_item_name( $cart_item, $cart_item_key ) {
    // Only for logged-in users
    if ( ! is_user_logged_in() ) return;
    
    // Get current user
    $user = wp_get_current_user();
    
    // Get product ID
    $product_id = $cart_item['variation_id'] > 0 ? $cart_item['variation_id'] : $cart_item['product_id'];
    
    // If true
    if ( wc_customer_bought_product( $user->user_email, $user->ID, $product_id ) ) {        
        echo '<p class="my-class">' . sprintf( __( 'Hi %s you already purchased this product in the past.', 'woocommerce' ), $user->first_name ) . '</p>'; 
    }
}
add_action( 'woocommerce_after_cart_item_name', 'action_woocommerce_after_cart_item_name', 10, 2 );

Geben Sie hier die Bildbeschreibung ein

  • Hallo @7uc1f3r, das funktioniert, aber kann es unter “von” positioniert werden, damit es mit der Checkout-Seite identisch ist?

    – Marwa

    12. Juni 2021 um 16:04 Uhr

  • @marwah “by” ist in einer standardmäßigen WooCommerce-Umgebung nicht vorhanden, ich glaube, hier geht es um Warenkorb-Artikeldaten. Was du tun könntest, ist Tauschen Sie die nächsten 2 Codezeilen in der cart/cart.php aus Vorlagendatei. Verschieben Sie also Zeile 85 nach Zeile 87, und was in Zeile 87 steht, verschieben Sie nach Zeile 85. Das sollte Ihr Problem lösen

    – 7uc1f3r

    13. Juni 2021 um 6:39 Uhr


  • Hallo @7uc1f3r Vielen Dank für die Antwort, ich habe es gerade getestet und es funktioniert gut, wie ich es will. Nochmals vielen Dank

    – Marwa

    14. Juni 2021 um 10:22 Uhr

1004300cookie-checkZeigen Sie die Nachricht unter dem Produktnamen auf der WooCommerce-Warenkorbseite an, wenn der Benutzer das Produkt zuvor gekauft hat

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

Privacy policy