Icono ayuda

¿Necesitas ayuda?

Contactar con asesor por WhatsApp

Saltar al contenido

Ariapsa - Diseño de páginas web México

Evitar mostrar productos de subcategorías en categoría principal

Explicación de las diferentes soluciones:

  1. Método Principal (pre_get_posts):
    • Es la solución más limpia y eficiente
    • Afecta a todas las consultas principales de categorías
    • No interfiere con otros plugins o widgets
    • Mejor rendimiento
  2. Método Alternativo (woocommerce_product_query_tax_query):
    • Útil si el primer método no funciona con tu tema
    • Más específico para WooCommerce
    • Puede ser necesario en algunos casos particulares
  3. Solución para Widgets:
    • Específica para widgets de productos
    • Útil si necesitas mantener el comportamiento en el loop principal pero modificarlo en widgets
  4. Solución para Shortcodes:
    • Modifica el comportamiento de los shortcodes de productos
    • Útil para páginas personalizadas donde uses shortcodes

Para implementar:

  1. Elige el método que mejor se adapte a tus necesidades:
    • Si solo necesitas la funcionalidad básica, usa el Método 1
    • Si necesitas una solución completa, puedes usar todos los métodos
  2. Añade el código en:
    • Functions.php de tu tema hijo (recomendado)
    • Un plugin de snippets como "Code Snippets"
  3. Prueba en diferentes situaciones:
    • Página de categoría principal
    • Widgets de productos
    • Shortcodes de productos

Consideraciones adicionales:

  1. Rendimiento:
    • El código es ligero y no afecta significativamente al rendimiento
    • Las consultas se optimizan al reducir los productos mostrados
  2. Compatibilidad:
    • Compatible con la mayoría de los temas
    • Funciona con WooCommerce 3.0+
    • No interfiere con otros plugins
  3. Mantenimiento:
    • Código fácil de modificar
    • Comentarios explicativos incluidos
    • Fácil de deshabilitar si es necesario

<?php
/**
* Evitar mostrar productos de subcategorías en categoría principal
*/
// Método 1: Usando pre_get_posts (recomendado)
function excluir_productos_subcategorias($query) {
if (!is_admin() && $query->is_main_query() && is_product_category()) {
$query->set('tax_query', array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => get_queried_object_id(),
'include_children' => false
)
));
}
}
add_action('pre_get_posts', 'excluir_productos_subcategorias');
// Método 2: Modificando los argumentos de WooCommerce (alternativa)
function modificar_args_loop_shop($args) {
if (is_product_category()) {
$args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => get_queried_object_id(),
'include_children' => false
)
);
}
return $args;
}
add_filter('woocommerce_product_query_tax_query', 'modificar_args_loop_shop');
// Método 3: Solución específica para widgets (opcional)
function modificar_args_widget_productos($args) {
if (isset($args['tax_query'])) {
foreach ($args['tax_query'] as $key => $value) {
if (isset($value['taxonomy']) && $value['taxonomy'] === 'product_cat') {
$args['tax_query'][$key]['include_children'] = false;
}
}
}
return $args;
}
add_filter('woocommerce_products_widget_query_args', 'modificar_args_widget_productos');
// Método 4: Solución para shortcodes de productos (opcional)
function modificar_args_shortcode_productos($args) {
if (isset($args['category'])) {
$args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => explode(',', $args['category']),
'include_children' => false
)
);
unset($args['category']);
}
return $args;
}
add_filter('woocommerce_shortcode_products_query', 'modificar_args_shortcode_productos');
Ariapsa - Diseño de páginas web México
×

Iniciar Sesión

El registro de usuarios no está permitido.