У меня есть настройка функции добавления элемента, которая выглядит так:
<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>
Есть ли аналогичный или другой способ создания функции удаления элемента?
Да, есть 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
, и все готово.
все коды выше проверены пчелами и работают нормально.
@LukasHillebrand сегодня я ушел из офиса, разберусь завтра, уверен, что это возможно
Супер! позвольте мне купить вам пива / кофе в помощь :-)
@LukasHillebrand уверен, что это будет приятно :), я начинаю работать над этим запросом, у меня есть один вопрос, вы правильно отображаете эти две кнопки на страницах архива?
На отдельной странице товара: dropbox.com/s/fxjrclcem3baefn/…
Большое спасибо! у меня все еще не работает: "-" не появляется, и у меня нет ошибок в консоли.
@LukasHillebrand, не могли бы вы опубликовать веб-ссылку, чтобы проверить, почему, поскольку я протестировал этот код выше локально, и он работает нормально
Конечно, но мне нужно отправить его вам наедине! Где?
Позвольте нам продолжить обсуждение в чате.
Работает нормально, спасибо! Но если в корзине есть товар с количеством, скажем, 5, он удаляет все 5, а не только 1.