- Añade el código en:
- Functions.php de tu tema hijo (recomendado)
- Un plugin de snippets como "Code Snippets"
<?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');