@Muvka

Можно ли через фрагменты Woocommerce передать свои данные?

Вот таким кодом я удаляю товар из корзины
add_action('wp_ajax_remove_cart_item', 'remove_cart_item');
add_action('wp_ajax_nopriv_remove_cart_item', 'remove_cart_item');
        
function remove_cart_item() {
  global $woocommerce;
  $cart_id = wc_clean($_POST['cart_id']);

  if(WC()->cart->remove_cart_item($cart_id)) {
    WC_AJAX::get_refreshed_fragments();
  } else {
    $data = array(
      'error' => true
    );
    echo wp_send_json($data);
  }

  wp_die();
}

Но проблема в том, что чтобы сделать доступной кнопку "добавить в корзину" мне нужно получить в js id товара. Как id товара получить, я знаю. Проблема в том, как передать этот id в js. У меня только 2 варианта в голове - делать еще один запрос к серверу перед удалением товара из корзины, но этот способ не очень правильный, как по мне. И второй - в фильтре woocommerce_add_to_cart_fragments, в фрагментах, создать ключ product_id и при замене содержимого элементов, проверять на этот ключ. Но тоже не очень вариант. Нельзя как-то к cart_hash и fragments, возвращаемых после WC_AJAX::get_refreshed_fragments(), добавить еще один ключ только в нужной мне функции?

Дополнение: Посмотрев код метода, я пришел к выводу, что может проще написать свою похожую функцию, которая будет принимать параметры? Я все равно весь js код сам пишу.
  • Вопрос задан
  • 32 просмотра
Пригласить эксперта
Ответы на вопрос 1
@weart
Я правильно понимаю, что вы хотите сделать добавление и удаление товара через ajax?
Проще всего сделать кастомные кнопки добавления/удаления и повесить на них соответствующие функции, передав id товара через attr.

Пример добавления в корзину:

$('.add-to-cart').on('click', function() {
		var product_id = $(this).attr("data-product_id");
		var ajaxURL = php_data.ajaxurl;
		$.ajax({
			type: 'POST',
			url: ajaxURL,			
			data: {
				action: "product_add",
				product_id: product_id,
			},
			success: function(data) {
				$(".cart-count").text(data);	// обновить счетчик на иконке корзины			
			},
			error: function() {
				alert("Error");
			}
		});
		return false;
	});


Сама кнопка:

global $product;
$id = $product->get_id();
echo '<button data-product_id="'. $id .'" class="add-to-cart">В корзину</button>';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ингипро Москва
от 130 000 до 250 000 руб.
SUMMING Москва
от 3 000 usd.
SUMMING Москва
от 3 000 usd.