Woocommerce中的自定义删除购物车项目功能

时间:2018-09-13 15:12:41

标签: php wordpress woocommerce cart hook-woocommerce

我具有添加项功能设置,如下所示:

                <div class="col s4">
                    <a class="addtocart_link" href="<?php echo esc_url( $product->add_to_cart_url() ); ?>" title="<?php echo esc_attr( $product->add_to_cart_text() ); ?>">
                        <span class="action_box fa fa-plus"></span>
                    </a>
                </div>

是否有类似的方法或其他方法来创建删除项功能?

1 个答案:

答案 0 :(得分:1)

是的,有Index ColA ColB ColC 0 2 13-6 MumboJumbo5 1 2 14-5 MumboJumbo 2 2 24-5 MumboJumbo3 3 2 35-6 MumboJumbo8 4 3 23-8 MumboJumbo4 5 4 18-2 MumboJumbo2 6 10 42-1 MumboJumbo7 7 10 86-1 MumboJumbo6 8 Load NaN MumboJumbo9 ,但是您需要获取购物车商品密钥才能使用以下代码:

wc_get_cart_remove_url

当然,上面的代码仅适用于简单产品,只需将其从购物车中删除即可。

如果您想一次减少一个购物车中的一项,则需要使用以下不同的方法:

首先:让我们添加带有一些属性(例如数量和产品ID)的Remove链接和add_to_cart,以便使用我们的脚本处理数据。

<?php
$cart_item_key = WC()->cart->generate_cart_id( $product->get_ID() );
$in_cart       = WC()->cart->find_product_in_cart( $cart_item_key );
if ( $in_cart ) {
    $cart_item_remove_url = wc_get_cart_remove_url( $cart_item_key );
    ?>
    <div class="col s4">
        <a class="remove_from_cart" href="<?php echo esc_url( $cart_item_remove_url ); ?>" title="remove_from_cart ">
            <span class=" action_box fa fa-minus "></span></a>
            </div>
    <?php

}

现在,我们需要将脚本添加到Wordpress页脚中,或者您可以将其添加到Javascript文件中

add_action( 'woocommerce_after_add_to_cart_button', 'remove_product' );

function remove_product() {
    global $product;

    $cart_item_key        = WC()->cart->generate_cart_id( $product->get_ID() );
    $in_cart              = WC()->cart->find_product_in_cart( $cart_item_key );
    $cart_item_remove_url = wc_get_cart_remove_url( $cart_item_key );

?>

<div class="col s4">
<a class="addtocart_link"
id ="add_to_cart" 
title="add_to_cart" 
data-product-id="<?php echo $product->get_ID(); ?>"
data-cart-item-key="<?php echo $cart_item_key; ?>">
<span class="action_box fa fa-plus"></span></a>
            </div>
<?php
    if ( $in_cart ) {
        $quantities = WC()->cart->get_cart_item_quantities();
        foreach ( $quantities as $key => $quantity ) {
            if ( $product->get_ID() == $key ) {
                if ( $quantity > 1 ) {
                    ?>
                    <div class="col s4">
                    <a id="remove_one_item" class="remove_from_cart" href="#" 
                    data-product-id="<?php echo $product->get_ID(); ?>"
                    data-in-cart-qty="<?php echo  $quantity; ?>"
                    data-cart-item-key="<?php echo $cart_item_key; ?>"
                    title="remove_from_cart ">
                        <span class=" action_box fa fa-minus "></span></a>
                    </div>
                    <?php
                    return;
                }
            }
        }
        ?>
        <div class="col s4">
        <a class="remove_from_cart" href="<?php echo esc_url( $cart_item_remove_url ); ?>" title="remove_from_cart ">
        <span class=" action_box fa fa-minus "></span></a>

        <?php
    }

}

最后,当用户单击删除链接时,我们需要处理数据

add_action( 'wp_footer', 'change_qty_script' );

function change_qty_script() {
    ?>
    <script>
    jQuery(document).ready(function ($) {
    $('#remove_one_item').click(function () {

        var current_qty = parseInt($(this).attr('data-in-cart-qty'));
        var id = $(this).attr('data-product-id');
        var cat_item_key = $(this).attr('data-cart-item-key');
        var data = {
            product_id: id,
            quantity: current_qty - 1,
            cat_item_key : cat_item_key
        };
        var url = wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'update_qty');
        $.post(url, data, function (response) {
            if (!response) {
                return;
            }
            if (response) {
                location.reload();
            }
        });
    });
    $('#add_to_cart').click(function () {

        var id = $(this).attr('data-product-id');
        var cat_item_key = $(this).attr('data-cart-item-key');
        var data = {
            product_id: id,
            quantity: 1,
        };
        var url = wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart');
        $.post(url, data, function (response) {
            if (!response) {
                return;
            }
            if (response) {
                location.reload();
            }
        });
    });

    });
    </script>
    <?php

}

将上面的代码放在add_action( 'wc_ajax_update_qty', 'update_qty' ); function update_qty() { ob_start(); $product_id = absint( $_POST['product_id'] ); $product = wc_get_product( $product_id ); $quantity = $_POST['quantity']; $cat_item_key = $_POST['cat_item_key']; WC()->cart->set_quantity( $cat_item_key, $quantity, true ); wp_send_json( 'done' ); } 中,您可以使用。

以上所有代码均已通过蜜蜂测试,并且工作正常。