2 votes

ajout de quantity_inputs après le hook woocommerce_loop_add_to_cart_link sans l'appeler

J'ai ajouté un code dans function.php pour ajouter la section quantité après l'ajout au panier dans toutes les pages.

Mais je ne veux pas l'ajouter également dans la page de la liste de souhaits,

Je la prépare donc comme suit :

add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
    if (!is_page('wishlist')) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        $html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
        // Access the cart items
        $in_cart = false;
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            $product_id = $cart_item['product_id'];
            $quantity = $cart_item['quantity'];
            if($product_id == $product->get_ID()){
                $in_cart = true;
                break;
            }
        }
        // If we have match update quantity
        if($in_cart) {
            $html .= woocommerce_quantity_input( array('input_value' => $quantity), $product, false );
        } else {
            $html .= woocommerce_quantity_input( array(), $product, false );
        }
        $html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
        $html .= '</form>';
    }
    return $html;
}
}

Cela fonctionne, mais le problème est qu'il supprime le bouton d'ajout au panier sur la page de la liste de souhaits.

Qu'est-ce que je fais de travers ? Est-ce que je peux le faire sans appeler le hook woocommerce_loop_add_to_cart_link ?

Car si je l'enlève du filtre, le bouton réapparaît.

3voto

Moshe Gross Points 156

Vous devez ajouter return $html; au bas de la page comme suit

add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
    if (!is_page('wishlist')) {
        if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
            $html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
            // Access the cart items
            $in_cart = false;
            foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
                $product_id = $cart_item['product_id'];
                $quantity = $cart_item['quantity'];
                if($product_id == $product->get_ID()){
                    $in_cart = true;
                    break;
                }
            }
            // If we have match update quantity
            if($in_cart) {
                $html .= woocommerce_quantity_input( array('input_value' => $quantity), $product, false );
            } else {
                $html .= woocommerce_quantity_input( array(), $product, false );
            }
            $html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
            $html .= '</form>';
        }
        return $html;
    }
    return $html;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X