Na loja de comércio eletrônico:
Existem itens exibidos na página inicial e cada um deles possui um botão "Adicionar ao carrinho" abaixo deles. Quando este botão é clicado, o item é adicionado ao carrinho. Se esse botão for clicado novamente, a quantidade do item que já existe no carrinho será incrementada em 1. Acredito que esse seja o loop . Por enquanto, tudo bem.
Na página Produto único, há um botão "Adicionar ao carrinho". Quando este botão é clicado, o item é adicionado ao carrinho. Há também uma caixa de texto de entrada Quantidade que pode ser usada para alterar a quantidade. Isso também está bem.
O PROBLEMA:
Preciso diferenciar o botão "Adicionar ao carrinho" que foi clicado no loop (atualmente na página inicial, mas também pode ser usado em outras páginas, como a página de arquivo morto, etc.) vs o botão "Adicionar ao carrinho" que foi clicado na página Produto Único. Com base nessa diferenciação, aqui está o que eu preciso fazer:
- Se o botão "Adicionar ao carrinho" que aparece no loop foi clicado, pegue a quantidade deste item que já existe no carrinho usando o
$cart_item_key
, incremente-o em 1 e envie-o para uma função personalizada que fará um processamento adicional e salvará os detalhes ao carrinho novamente. - Se clicar no botão "Adicionar ao carrinho" que aparece na página Produto único, pegue a quantidade deste item que já existe no carrinho usando o
$cart_item_key
, multiplique-o por 3 e envie-o para uma função personalizada que fará processamento e economia adicionais os detalhes ao carrinho novamente. - Nos dois casos acima, a Quantidade está sendo alterada, com base em diferentes lógicas, e essa Quantidade precisa ser enviada para uma chamada de função personalizada.
O QUE TENTEI:
Eu tentei o seguinte código:
add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{
$cart = WC()->cart->get_cart();
$product = wc_get_product($product_id);
// NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
if (add to cart within loop is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart + 1;
}
else if (add to cart on single product page is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart * 3;
}
// Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
my_custom_function($new_quantity, $cart_item_key);
}
function my_custom_function($new_quantity, $cart_item_key)
{
echo $new_quantity;
WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
WC()->cart->set_session();
}
O problema com o código acima é que, se eu não tiver a if... else if...
lógica, o código será executado independentemente da localização do botão "Adicionar ao carrinho". Em outras palavras, se clico no botão "Adicionar ao carrinho" localizado no loop (página inicial, página Archive ou qualquer página que use o loop) ou clico no botão "Adicionar ao carrinho" localizado na página Produto único, o código acima é executado na ausência da if... else if...
lógica.
Portanto, desejo executar um código separado quando o botão "Adicionar ao carrinho" localizado no loop for clicado (independentemente da sua localização, se Homepage, arquivos etc.) e executar um código diferente quando o botão "Adicionar ao carrinho" localizado na página Produto Único é clicado. Como posso conseguir isso?
Esperando algo assim:
- Se o botão que aparece dentro do loop for clicado -> Faça isso.
- Se o botão que aparece na página Produto único for clicado -> Faça isso.
fonte
Você pode tentar desta maneira:
Mas você precisa verificar suas configurações.
Settings > Permalinks
.fonte
você pode usar
is_product()
,is_product_category()
funçãofonte
$new_quantity = $quantity_from_cart * 3;
funcionasse. Mas isso não acontece. Simplesmente incrementa a quantidade atual existente no carrinho, mas NÃO multiplica a quantidade por 3 . Como consertar isto?if ( is_product() )
está sendo executado. Não consigo encontrar o motivo! Importa que seja um botão AJAX Add to Cart ??Existem algumas soluções em que eu poderia pensar. Mas aqui está um:
Poderíamos adicionar uma entrada oculta dentro do formulário, que o código acima faz.
Em seguida, pode verificar o seu valor como:
Observe que isso é apenas uma idéia e não uma solução completa ... Você precisa cuidar do botão ajax.
fonte
$button_location
na solicitação ..