En la tienda de comercio electrónico:
Hay elementos que se muestran en la página de inicio y cada uno de ellos tiene un botón "Agregar al carrito" debajo de ellos. Cuando se hace clic en este botón, el artículo se agrega al carrito. Si se vuelve a hacer clic en este botón, la Cantidad del artículo que ya existe en el carrito se incrementa en 1. Creo que este es el ciclo . Hasta aquí todo bien.
En la página Single Product, hay un botón "Agregar al carrito". Cuando se hace clic en este botón, el artículo se agrega al carrito. También hay un cuadro de texto de entrada de Cantidad que se puede usar para cambiar la cantidad. Esto también está bien.
LA CUESTIÓN:
Necesito diferenciar entre el botón "Agregar al carrito" en el que se hizo clic dentro del bucle (actualmente en la página de inicio, pero también se puede usar en otras páginas como la página Archivo, etc.) frente al botón "Agregar al carrito" en el que se hizo clic en la página de un solo producto. En base a esta diferenciación, esto es lo que necesito hacer:
- Si se hizo clic en el botón "Agregar al carrito" que aparece dentro del bucle, tome la Cantidad de este artículo que ya existe en el carrito
$cart_item_key
, increméntelo en 1 y envíelo a una función personalizada que realizará un procesamiento adicional y guardará los detalles Al carro de nuevo. - Si se hizo clic en el botón "Agregar al carrito" que aparece en la página del Producto único, tome la Cantidad de este artículo que ya existe en el carrito usando
$cart_item_key
, multiplíquelo por 3 y envíelo a una función personalizada que realizará un procesamiento adicional y guardará Los detalles al carrito de nuevo. - En los dos casos anteriores, la cantidad se cambia, en función de diferentes lógicas y esta cantidad debe enviarse a una llamada de función personalizada.
Lo que intenté:
Intenté el siguiente 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();
}
El problema con el código anterior es que si no tengo la if... else if...
lógica, entonces el código se ejecuta independientemente de dónde se encuentre el botón "Agregar al carrito". En otras palabras, si hago clic en el botón "Agregar al carrito" que se encuentra en el bucle (página de inicio, página de archivo o cualquier página que use el bucle) o si hago clic en el botón "Agregar al carrito" ubicado en la página del Producto único, el código anterior se ejecuta en ausencia de la if... else if...
lógica.
Por lo tanto, quiero ejecutar un código separado cuando se hace clic en el botón "Agregar al carrito" que se encuentra en el bucle (independientemente de su ubicación, ya sea Página de inicio, Archivos, etc.) y ejecutar un código diferente cuando se hace clic en el botón "Agregar al carrito" que se encuentra en la página Producto único se hace clic. ¿Cómo puedo conseguir esto?
Esperando algo como esto:
- Si se hace clic en el botón que aparece dentro del bucle -> Haga esto.
- Si se hace clic en el botón que aparece en la página Single Product -> Haz eso.
fuente
Puedes probar de esta manera:
Pero necesita verificar su configuración.
Settings > Permalinks
.fuente
puedes usar
is_product()
,is_product_category()
funciónfuente
$new_quantity = $quantity_from_cart * 3;
funcionara. Pero no lo hace. Simplemente incrementa la cantidad actual existente en el carrito, pero NO multiplica la cantidad por 3 . ¿Cómo arreglar esto?if ( is_product() )
es NO está ejecutando. ¡Parece que no puedo encontrar el motivo! ¿Importa que sea un botón AJAX Añadir al carrito?Hay dos soluciones que se me ocurren. Pero aquí hay uno:
Podríamos agregar una entrada oculta dentro del formulario, que el código anterior lo hace.
Luego podría verificar su valor como:
Tenga en cuenta que esto es solo una idea y no una solución completa ... Debe cuidar el botón ajax.
fuente
$button_location
en la solicitud ..