web-dev-qa-db-ja.com

ページアクセス時にウコマース商品の数量を設定する

ページを訪問するときに商品の数量を設定しようとしています。商品がバスケットに入っていない場合、コードは正常に機能し、正しい数量を追加します。ただし、バスケットに何か入っていてそれを更新すると、さらに13項目が追加されます。

// 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

私のコードにエラーがありました。ここから: http://www.sitepoint.com/woocommerce-actions-and-filters-manipulate-cart/

変化

// 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 );

働いています。

1
Badger