Как удалить мой товар из корзины в WooCommerce? - PullRequest
0 голосов
/ 20 мая 2018

Я создаю свою корзину таким образом:

if( !is_wp_error( $this->getCartContentsCount() ) ) {
    $cart_items = WC()->cart->get_cart();
    foreach( $cart_items as $item ) { ?>
        <div class="left col-md-3">
            <div class="product-image"><!-- Make sure ot check if it's a gallery, if so, get its first image -->
                <?php echo $item['data']->get_image(); ?>
            </div>
        </div>
        <div class="right col-md-8">
            <h4 class="product-name"><?php echo $item['data']->get_name(); ?></h4>
            <div class="product-information">
                <span class="product-quantity"><?php echo $item['quantity'] . 'x' ?></span>
                <span class="product-price"><?php echo $item['data']->get_price_html(); ?></span>
            </div>
            <?php
                echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf(
                    '<a href="%s" aria-label="%s" data-product_id="%s" data-product_sku="%s">X</a>',
                    esc_url( wc_get_cart_remove_url( $item ) ),
                    __( 'Remove this item', 'woocommerce' ),
                    esc_attr( $item['product_id'] ),
                    esc_attr( $item['data']->get_sku() )
                ), $item );
            ?>
            </div>
    <?php }
}

Как вы можете видеть, я использую базовую реализацию Woocommerce механизма "удалить элемент" согласно cart.php, но, к сожалению,это не работает.

Вот что генерирует Ву:

<a href="http://127.0.0.1/wordpress/cart/?remove_item%5Bkey%5D=6e7b33fdea3adc80ebd648fffb665bb8&amp;remove_item%5Bproduct_id%5D=807&amp;remove_item%5Bvariation_id%5D=0&amp;remove_item%5Bquantity%5D=1&amp;remove_item%5Bline_subtotal%5D=40&amp;remove_item%5Bline_subtotal_tax%5D=0&amp;remove_item%5Bline_total%5D=40&amp;remove_item%5Bline_tax%5D=0&amp;remove_item%5Bdata%5D&amp;_wpnonce=2242057dec" aria-label="Remove this item" data-product_id="807" data-product_sku="235677r">X</a>

Я проверил каждый атрибут, и он действительно действителен!

Другие симптомы:

  1. Ссылка, при прямом доступе, переносит меня в саму корзину (я полагаю, это происходит из-за одноразового номера).

  2. Сбрасывание корзины до ипосле того, как клик по-прежнему показывает ту же корзину, в которой есть только один элемент, механизм удаления не работает, так как корзина не меняет своего состояния.

Почему это не так?не работает?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Просто используйте это WC_Cart::remove_cart_item( $cart_item_key );

0 голосов
/ 20 мая 2018

На самом деле я скопировал реализацию cart.php и настроил ее под свои нужды:

ob_start();

if( !is_wp_error( $this->getCartContentsCount() ) ) { //This checks if there are any items in the cart.
    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
        );

        $product_id = apply_filters(
            'woocommerce_cart_item_product_id',
            $cart_item['product_id'], $cart_item, $cart_item_key
        );

        if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
            $product_permalink = apply_filters(
                'woocommerce_cart_item_permalink',
                $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key
            ); ?>

            <div class="cart-item <?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">
                <div class="left col-md-3">
                    <div class="product-image">
                    <?php
                        $thumbnail = apply_filters(
                            'woocommerce_cart_item_thumbnail',
                            $_product->get_image(), $cart_item, $cart_item_key
                        );
                        if ( !$product_permalink ) {
                            echo wp_kses_post( $thumbnail );
                        } else {
                            printf( '<a href="%s">%s</a>', esc_url( $product_permalink ), wp_kses_post( $thumbnail ) );
                        }
                    ?>
                    </div>
                </div>
                <div class="right col-md-8">
                    <h4 class="product-name">
                    <?php
                        if ( ! $product_permalink ) {
                            echo wp_kses_post( apply_filters(
                                'woocommerce_cart_item_name',
                                $_product->get_name(), $cart_item, $cart_item_key ) . '&nbsp;'
                            );
                        } else {
                            echo wp_kses_post( apply_filters(
                                'woocommerce_cart_item_name',
                                sprintf(
                                    '<a href="%s">%s</a>',
                                    esc_url( $product_permalink ), $_product->get_name()
                                ), $cart_item, $cart_item_key
                                )
                            );
                        }
                        // Meta data.
                        echo wc_get_formatted_cart_item_data( $cart_item ); // PHPCS: XSS ok.
                        // Backorder notification.
                        if ( $_product->backorders_require_notification() && $_product->is_on_backorder( $cart_item['quantity'] ) ) {
                            echo wp_kses_post( apply_filters(
                                'woocommerce_cart_item_backorder_notification',
                                '<p class="backorder_notification">' . esc_html__( 'Available on backorder', 'woocommerce' ) . '</p>'
                                )
                            );
                        }
                    ?>
                    </h4>
                    <div class="product-information">
                        <div class="product-quantity">
                        <?php
                            $product_quantity = sprintf(
                                '%s<input type="hidden" name="cart[%s][qty]" value="%s" />',
                                $cart_item['quantity'], $cart_item_key, $cart_item['quantity']
                            );
                            echo apply_filters(
                                'woocommerce_cart_item_quantity',
                                $product_quantity, $cart_item_key, $cart_item
                            ); // PHPCS: XSS ok.
                        ?>
                        </div>
                        <div class="product-price">
                        <?php
                            echo apply_filters(
                                'woocommerce_cart_item_price',
                                WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); // PHPCS: XSS ok.
                        ?>
                        </div>
                    </div>
                    <div class="product-remove">
                        <?php
                            echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf(
                                '<a href="%s" class="remove" aria-label="%s" data-product_id="%s" data-product_sku="%s">&times;</a>',
                                esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
                                __( 'Remove this item', 'woocommerce' ),
                                esc_attr( $product_id ),
                                esc_attr( $_product->get_sku() )
                            ), $cart_item_key );
                        ?>
                        </div>
                </div>
            </div>
        <?php
        }
    }
}

$markup_output = ob_get_contents();
ob_end_clean();

echo $markup_output;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...