web-dev-qa-db-fra.com

Définir la quantité de produit woocommerce à la page visite

J'essaie de définir la quantité d'un produit en visitant une page. Si le produit n'est pas dans le panier, le code fonctionne bien et ajoute la quantité correcte. Cependant, si j'ai quelque chose dans le panier et que je l'actualise, il ajoute 13 articles supplémentaires.

// add unpaid entries to cart
add_action( 'pre_get_posts', 'add_entries_to_cart' );

function add_entries_to_cart() {
    global $woocommerce;

    // Check we are logged in
    if ( is_user_logged_in() ) {

        // Check if we are in admin area
        if ( ! is_admin() ) {
            $user = wp_get_current_user();
            $entries = get_user_meta($user->ID, 'entry_count', true);
            $entries_paid = get_user_meta($user->ID, 'paid_entries', true);

            $product_id = 229;
            $quantity = $entries - $entries_paid;

            $found = false;
            //check if product already in cart, get id
            if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
                foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                    $_product = $values['data'];
                    if ( $_product->id == $product_id ) {
                        // correct quantity
                        unset( $woocommerce->cart->cart_contents[$product_id] );
                        $woocommerce->cart->add_to_cart( $product_id, $quantity );
                        $found = true;
                    }
                }
                // if product not found, add it
                if ( ! $found ) {
                    $woocommerce->cart->add_to_cart( $product_id, $quantity );
                }
            }
            // no product in cart so add it
            else {
                // add to cart
                $woocommerce->cart->add_to_cart( $product_id, $quantity );
            }
        }
    }
}
1
Badger

Il y avait une erreur dans mon code. De là: http://www.sitepoint.com/woocommerce-actions-and-filters-manipulate-cart/

En changeant

// correct quantity
unset( $woocommerce->cart->cart_contents[$product_id] );
$woocommerce->cart->add_to_cart( $product_id, $quantity );

À

// correct quantity
// Get it's unique ID within the Cart
$prod_unique_id = $woocommerce->cart->generate_cart_id( $product_id );
// Remove it from the cart by un-setting it
unset( $woocommerce->cart->cart_contents[$prod_unique_id] );
$woocommerce->cart->add_to_cart( $product_id, $quantity );

A travaillé.

1
Badger