Hola, @ethink1. Puedes añadir un condicional para que salga de la función si no es de la categoría que quieres. Para comprobar que el producto esté en la categoría deseada, sigue estos pasos:
- Obten el listado de categorías del producto.
- Comprueba si existe la categoría.
- Retorna de la función o continua la ejecución.
El código resultante sería algo así:
add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 ); // Simple products
function jk_woocommerce_quantity_input_args( $args, $product ) {
// Obten las categorías del producto
$product_terms = get_the_term_list( $product->ID, 'product_cat' );
// Comprueba si el producto está en esa categoría
// IMPORTANTE: CAMBIA EL NOMBRE DE LA CATEGORÍA POR EL NOMBRE REAL
if ( is_singular( 'product' ) && in_array( 'nombre-de-la-categoria', $product_terms ) {
$args['input_value'] = 5; // Starting value (we only want to affect product pages, not cart)
}
$args['max_value'] = 80; // Maximum value
$args['min_value'] = 5; // Minimum value
$args['step'] = 1; // Quantity steps
return $args;
}
add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' ); // Variations
function jk_woocommerce_available_variation( $args ) {
$args['max_qty'] = 80; // Maximum value (variations)
$args['min_qty'] = 5; // Minimum value (variations)
return $args;
}
Mira las diferencias del código y dime si te vale.
Un saludo.
-
Esta respuesta fue modificada hace 5 años, 3 meses por
José Arcos.
Iniciador del debate
ethink1
(@ethink1)
Hola José,
En primer lugar darte gracias por la respuesta. Al añadir este código la página se vuelve en blanco y sale el mensaje «El sitio está experimentando dificultades técnicas.»
Donde me indicas el nombre de la categoría he puesto uno de los míos, solo he cambiado eso, no sé que puede ser lo que esté dando error. Ojalá puedas corregirlo.
Muchísimas gracias.
Disculpa por el error, sustituye la línea:
$product_terms = get_the_term_list( $product->ID, 'product_cat' );
por:
$product_terms = get_the_term( $product->ID, 'product_cat' );
Así te devuelve un array y una cadena de texto.
Un saludo.
Iniciador del debate
ethink1
(@ethink1)
Jose´, lo siento pero me devuelve el mismo mensaje… se ve que hay algo que no está bien 🙁
Esto es lo que estoy poniendo:
add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 ); // Simple products
function jk_woocommerce_quantity_input_args( $args, $product ) {
// Obten las categorías del producto
$product_terms=get_the_term( $product->ID, 'product_cat' );
// Comprueba si el producto está en esa categoría
// IMPORTANTE: CAMBIA EL NOMBRE DE LA CATEGORÍA POR EL NOMBRE REAL
if ( is_singular( 'product' ) && in_array( 'itinerarios-permanentes', $product_terms ) {
$args['input_value'] = 5; // Starting value (we only want to affect product pages, not cart)
}
$args['max_value'] = 80; // Maximum value
$args['min_value'] = 5; // Minimum value
$args['step'] = 1; // Quantity steps
return $args;
}
add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' ); // Variations
function jk_woocommerce_available_variation( $args ) {
$args['max_qty'] = 80; // Maximum value (variations)
$args['min_qty'] = 5; // Minimum value (variations)
return $args;
}
-
Esta respuesta fue modificada hace 5 años, 3 meses por
José Arcos.
Disculpa de nuevo, la función es en plural, las prisas no son buenas 😉
$product_terms=get_the_terms( $product->ID, 'product_cat' );
Activa el debug en WordPress y copia por aquí lo que encuentres en el archivo debug.log. Sigue estas instrucciones si no sabes cómo:
https://codex.wordpress.org/es:Depurar_en_WordPress
Iniciador del debate
ethink1
(@ethink1)
Me sale esto:
Notice: Use of undefined constant WPLANG – assumed ‘WPLANG’ in /home/thinkworking/public_html/laponte.thinkworking.com/wp-content/plugins/woocommerce-es/woocommerce-es.php on line 113
Parse error: syntax error, unexpected ‘;’ in /home/thinkworking/public_html/laponte.thinkworking.com/wp-content/themes/bridge-child/functions.php on line 76
El sitio está experimentando dificultades técnicas.
La línea 76 es la correspondiente a este código:
$args[‘input_value’] = 5; // Starting value (we only want to affect product pages, not cart)
Espero que te sirva, mil gracias 🙂
Prueba con este código, he pasado el inspector y parece estar limpio de errores:
add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 ); // Simple products
function jk_woocommerce_quantity_input_args( $args, $product ) {
// Obten las categorías del producto
$product_terms = get_the_terms( $product->ID, 'product_cat' );
// Comprueba si el producto está en esa categoría
// IMPORTANTE: CAMBIA EL NOMBRE DE LA CATEGORÍA POR EL NOMBRE REAL
if ( is_singular( 'product' ) && in_array( 'itinerarios-permanentes', $product_terms, true ) ) {
$args['input_value'] = 5; // Starting value (we only want to affect product pages, not cart)
}
$args['max_value'] = 80; // Maximum value
$args['min_value'] = 5; // Minimum value
$args['step'] = 1; // Quantity steps
return $args;
}
add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' ); // Variations
function jk_woocommerce_available_variation( $args ) {
$args['max_qty'] = 80; // Maximum value (variations)
$args['min_qty'] = 5; // Minimum value (variations)
return $args;
}
Iniciador del debate
ethink1
(@ethink1)
Me hace lo mismo que la función primera, es decir, me aplica que empiece a contar desde 5 en todos los productos de la tienda, sin tener en cuenta la categoría. No sé porque no nos hace caso 🙁
A ver si a alguien se le ocurre otra forma y nos puede echar un cable
Vale, ahora lo entiendo 🤦♂️
Estaba entendiendo mal la lógica de tu pregunta. Intenta con este código, si no me doy por vencido 😉
add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 );
function jk_woocommerce_quantity_input_args( $args, $product ) {
$product_terms = get_the_terms( $product->ID, 'product_cat' );
if ( ! in_array( 'itinerarios-permanentes', $product_terms, true ) ) {
return $args;
}
if ( is_singular( 'product' ) ) {
$args['input_value'] = 5;
}
$args['max_value'] = 80;
$args['min_value'] = 5;
$args['step'] = 1;
return $args;
}
add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' );
function jk_woocommerce_available_variation( $args ) {
$args['max_qty'] = 80;
$args['min_qty'] = 5;
return $args;
}
Si por algún casual te diera error de página en blanco, pon por aquí el debug.
Un saludo.
Iniciador del debate
ethink1
(@ethink1)
Hola de nuevo Jose,
Pues no me hace nada, el contador de todos los productos empieza a 1.
Es como si no hubiera metido ningún código.
Tengo dos categorías de producto: itinerarios-permanentes y colaboracion.
En los productos incluidos dentro de Itinerarios permanentes quiero que empiece a contar las unidades desde 5 (es el mínimo de compra) y en Colaboración que empiece desde 1 (lo normal).
Con el primer código que puse conseguía que todos los productos empezaran desde 5, pero solo necesito que los de la categoría Itinerarios Permanantes empiecen así.
A ver si alguien me puede ayudar. Gracias y perdonar las molestias.
Iniciador del debate
ethink1
(@ethink1)
Escribo de nuevo para dejar aquí un código que encontré y que me funciona correctamente, por si lo necesitase otra persona:
add_filter( 'woocommerce_quantity_input_args', 'min_qty_filter_callback', 20, 2 );
function min_qty_filter_callback( $args, $product ) {
$category = 'NOMBRE_DE_TU_CATEGORIA_DE_PRODUCTO'; // The targeted product category
$min_qty = 5; // The minimum product quantity
$product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
if( has_term( $category, 'product_cat', $product_id ) ){
$args['min_value'] = $min_qty;
}
return $args;
}
Gracias @josearcos por tu paciencia y ganas de ayudarme 🙂
-
Esta respuesta fue modificada hace 5 años, 3 meses por
José Arcos.