Пользовательская функция удаления корзины в 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>

Есть ли аналогичный или другой способ создания функции удаления элемента?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
2 903
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, есть wc_get_cart_remove_url, но для этого вам нужно получить ключ корзины, чтобы вы могли использовать следующее:

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

}

Конечно, приведенный выше код будет работать только для простого продукта и просто удалит все элементы из тележек.

Если вы хотите уменьшить количество товаров в корзине по одному, вам нужно использовать другой подход, как показано ниже:

Первый : Давайте добавим нашу ссылку удаления и add_to_cart с некоторым атрибутом, например, количеством и идентификатором продукта, чтобы обрабатывать данные с помощью нашего скрипта.

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
    }

}

Теперь позвольте нам добавить наш скрипт в нижний колонтитул Wordpress, или вы можете добавить его в свой файл Javascript.

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' );
}

Поместите приведенные выше коды в ваш functions.php, и все готово.

все коды выше проверены пчелами и работают нормально.

Работает нормально, спасибо! Но если в корзине есть товар с количеством, скажем, 5, он удаляет все 5, а не только 1.

Lukas Hillebrand 13.09.2018 20:03

@LukasHillebrand сегодня я ушел из офиса, разберусь завтра, уверен, что это возможно

kashalo 13.09.2018 20:09

Супер! позвольте мне купить вам пива / кофе в помощь :-)

Lukas Hillebrand 13.09.2018 20:15

@LukasHillebrand уверен, что это будет приятно :), я начинаю работать над этим запросом, у меня есть один вопрос, вы правильно отображаете эти две кнопки на страницах архива?

kashalo 14.09.2018 11:49

На отдельной странице товара: dropbox.com/s/fxjrclcem3baefn/…

Lukas Hillebrand 14.09.2018 14:25

Большое спасибо! у меня все еще не работает: "-" не появляется, и у меня нет ошибок в консоли.

Lukas Hillebrand 15.09.2018 11:28

@LukasHillebrand, не могли бы вы опубликовать веб-ссылку, чтобы проверить, почему, поскольку я протестировал этот код выше локально, и он работает нормально

kashalo 15.09.2018 11:30

Конечно, но мне нужно отправить его вам наедине! Где?

Lukas Hillebrand 15.09.2018 11:38

Позвольте нам продолжить обсуждение в чате.

kashalo 15.09.2018 11:40

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